GP-4927: Fixing NeLoader IndexOutOfBoundsException

This commit is contained in:
Ryan Kurtz 2024-09-13 07:34:37 -04:00
parent f292bad0ed
commit 13d36c3c60

View File

@ -4,9 +4,9 @@
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@ -350,8 +350,15 @@ public class NeLoader extends AbstractOrdinalSupportLoader {
Address addr = space.getAddress(segidx, 0); Address addr = space.getAddress(segidx, 0);
try { try {
int offset = resource.getFileOffsetShifted(); long offset = Integer.toUnsignedLong(resource.getFileOffsetShifted());
int length = resource.getFileLengthShifted(); long length = Integer.toUnsignedLong(resource.getFileLengthShifted());
long extra = offset + length - fileBytes.getSize();
if (extra > 0) {
log.appendMsg(
"Resource at 0x%x exceeds file length by 0x%x bytes...truncating"
.formatted(offset, extra));
length -= extra;
}
if (length > 0) { if (length > 0) {
MemoryBlockUtils.createInitializedBlock(program, false, "Rsrc" + (id++), MemoryBlockUtils.createInitializedBlock(program, false, "Rsrc" + (id++),
addr, fileBytes, offset, length, "", "", true, false, false, log); addr, fileBytes, offset, length, "", "", true, false, false, log);