Skip to content

Commit

Permalink
fix: OOM abort error while injecting data (#45)
Browse files Browse the repository at this point in the history
* fix: OOM abort error while injecting data

After building Postject with -sASSERTIONS enabled, the error looked like
this:
```
Aborted(Cannot enlarge memory arrays to size 82239488 bytes (OOM). Either (1) compile with -sINITIAL_MEMORY=X with X higher than the current value 16777216, (2) compile with -sALLOW_MEMORY_GROWTH which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -sABORTING_MALLOC=0)
```
so I followed option 2 in this change.

Fixes: #42
Signed-off-by: Darshan Sen <[email protected]>

* fixup! test: bump test timeout

40000ms is still too for macOS.

Refs: https://app.circleci.com/pipelines/github/postmanlabs/postject/139/workflows/aee3c215-ddc7-4451-aad5-70bfc58dd8c3/jobs/1051/tests
Signed-off-by: Darshan Sen <[email protected]>

* fixup! test: bump test timeout

50000ms is still too low for macOS.

Refs: https://app.circleci.com/pipelines/github/postmanlabs/postject/140/workflows/d653f352-5415-4a83-95b8-c3a52393dc76/jobs/1062/tests
Signed-off-by: Darshan Sen <[email protected]>

* fixup! set INITIAL_MEMORY and MAXIMUM_MEMORY

Resolves a code review comment.

Signed-off-by: Darshan Sen <[email protected]>

Signed-off-by: Darshan Sen <[email protected]>
  • Loading branch information
RaisinTen authored Sep 30, 2022
1 parent 0035c07 commit a87c2fb
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 1 deletion.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ endif()
add_subdirectory(vendor/lief)

add_executable(postject src/postject.cpp)
set_target_properties(postject PROPERTIES LINK_FLAGS "-sMODULARIZE=1 --bind")
set_target_properties(postject PROPERTIES LINK_FLAGS "-sMODULARIZE=1 -sALLOW_MEMORY_GROWTH -sINITIAL_MEMORY=268435456 -sMAXIMUM_MEMORY=4294967296 --bind")

if(MSVC)
set_property(TARGET postject PROPERTY LINK_FLAGS /NODEFAULTLIB:MSVCRT)
Expand Down
46 changes: 46 additions & 0 deletions test/cli.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -88,3 +88,49 @@ describe("postject CLI", () => {
}
}).timeout(30000);
});

describe("Inject data into Node.js", () => {
let filename;
let tempDir;
let resourceContents;
let resourceFilename;

beforeEach(async () => {
tempDir = temporaryDirectory();
await fs.ensureDir(tempDir);

filename = path.join(tempDir, path.basename(process.execPath));

await fs.copy(process.execPath, filename);

resourceContents = crypto.randomBytes(64).toString("hex");
resourceFilename = path.join(tempDir, "resource.bin");
await fs.writeFile(resourceFilename, resourceContents);
});

afterEach(() => {
rimraf.sync(tempDir);
});

it("should inject a resource successfully", async () => {
{
const { status, stdout, stderr } = spawnSync(
"node",
["./dist/main.js", filename, "foobar", resourceFilename],
{ encoding: "utf-8" }
);
// TODO(dsanders11) - Enable this once we squelch LIEF warnings
// expect(stderr).to.be.empty;
expect(stdout).to.be.empty;
expect(status).to.equal(0);
}

// After injection
{
const { status } = spawnSync(filename, ["-e", "process.exit()"], {
encoding: "utf-8",
});
expect(status).to.equal(0);
}
}).timeout(60000);
});

0 comments on commit a87c2fb

Please sign in to comment.