diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/MzLoader.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/MzLoader.java index a26d9fd0201..e6131dc48d5 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/MzLoader.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/MzLoader.java @@ -139,7 +139,7 @@ private void markupHeaders(Program program, FileBytes fileBytes, MzExecutable mz MessageLog log, TaskMonitor monitor) { monitor.setMessage("Marking up headers..."); OldDOSHeader header = mz.getHeader(); - int blockSize = paragraphsToBytes(header.e_cparhdr()); + int blockSize = paragraphsToBytes(Short.toUnsignedInt(header.e_cparhdr())); try { Address headerSpaceAddr = AddressSpace.OTHER_SPACE.getAddress(0); MemoryBlock headerBlock = MemoryBlockUtils.createInitializedBlock(program, true, @@ -156,7 +156,7 @@ private void markupHeaders(Program program, FileBytes fileBytes, MzExecutable mz if (!relocations.isEmpty()) { DataType relocationType = relocations.get(0).toDataType(); int len = relocationType.getLength(); - addr = addr.add(header.e_lfarlc()); + addr = addr.add(Short.toUnsignedInt(header.e_lfarlc())); for (int i = 0; i < relocations.size(); i++) { monitor.checkCancelled(); DataUtilities.createData(program, addr.add(i * len), relocationType, -1, @@ -187,7 +187,7 @@ private void processMemoryBlocks(Program program, FileBytes fileBytes, knownSegments.add(space.getAddress((INITIAL_SEGMENT_VAL + header.e_cs()) & 0xffff, 0)); } // Allocate an initialized memory block for each segment we know about - int endOffset = pagesToBytes(header.e_cp() - 1) + header.e_cblp(); + int endOffset = pagesToBytes(Short.toUnsignedInt(header.e_cp()) - 1) + Short.toUnsignedInt(header.e_cblp()); if (endOffset > reader.length()) { log.appendMsg( "File is 0x%x bytes but header reports 0x%x".formatted(reader.length(), endOffset)); @@ -253,7 +253,7 @@ private void processMemoryBlocks(Program program, FileBytes fileBytes, // Allocate an uninitialized memory block for extra minimum required data space if (lastBlock != null) { - int extraAllocSize = paragraphsToBytes(header.e_minalloc()); + int extraAllocSize = paragraphsToBytes(Short.toUnsignedInt(header.e_minalloc())); if (extraAllocSize > 0) { MemoryBlockUtils.createUninitializedBlock(program, false, "DATA", lastBlock.getEnd().add(1), extraAllocSize, "", "mz", true, true, false, log); @@ -473,7 +473,7 @@ private Set getRelocationFixups(SegmentedAddressSpace space, * @return The segmented addresses converted to a file offset */ private int addressToFileOffset(int segment, int offset, OldDOSHeader header) { - return (short) segment * 16 + offset + paragraphsToBytes(header.e_cparhdr()); + return (short) segment * 16 + offset + paragraphsToBytes(Short.toUnsignedInt(header.e_cparhdr())); } /**