node-regedit icon indicating copy to clipboard operation
node-regedit copied to clipboard

putValue() causes uncatchable EOF exception when exception occurs near large binary values

Open ctrotsky opened this issue 5 years ago • 2 comments

This only seems to occur when "HKCU\TestKey"'s value is a large block of binary data that is written in the same call to putValues() where another error is raised. I haven't yet narrowed down on the exact data size where this starts occurring. This occurs when the registry value causing any kind of error comes after the large value in the input to putValue().

Sample code to cause this:

process.on('uncaughtException', (err: any) => {
    console.error('Uncaught Exception: ', err);
});

export const installRegistryEntries = async (context: InstallContext) => {
    const registryValueList = fs.readJsonSync('C:\\\\Registry.json');

    try {
        await new Promise((resolve, reject) => {
            regedit.putValue(registryValueList, (err: any) => {
                if (err) {
                    console.error(`Error in callback when saving registry values: ${err}`);
                    reject(err);
                }
                console.log('Finished saving registry values');
                resolve();
            });
        });
    } catch (err) {
        // At least one value failed to install
        console.error(`Caught error when saving registry values: ${err}`);
    }
};

Output:

2020-09-09 12:31:08.967 E: [CONSOLE.ERROR] Uncaught Exception:  Error: write EOF
    at WriteWrap.onWriteComplete [as oncomplete] (internal/stream_base_commons.js:92:16) {
  errno: 'EOF',
  code: 'EOF',
  syscall: 'write'
}
2020-09-09 12:31:08.968 E: [CONSOLE.ERROR] Error when saving registry values: Error: registry path does not exist
2020-09-09 12:31:08.969 I: [CONSOLE.LOG] Finished saving registry values
2020-09-09 12:31:08.970 E: [CONSOLE.ERROR] Caught error when saving registry values: Error: registry path does not exist

In this example,

  1. "HKCU\TestKey" is an existing registry path, and the value for this key is a large binary value.
  2. "HKCU\TestKeyThatDoesntExist" is a path that does not exist, and will lead to the "registry path does not exist" error.

File used for C:\Registry.json: https://github.com/ctrotsky/files/blob/master/Registry.json

You can see that in addition to the "registry path does not exist" error being raised in the callback, there's also a "Error: write EOF". This EOF error seems to be coming out of nowhere, and is not caught by the try/catch block.

ctrotsky avatar Sep 09 '20 12:09 ctrotsky

@ctrotsky sorry for the prolonged delay. Going to take a look at this asap.

kessler avatar Sep 01 '21 11:09 kessler

@ctrotsky it might be a problem in the communication between node and the vb script. did you manage to deduce the problematic size?

kessler avatar Sep 15 '21 10:09 kessler

no activity

kessler avatar Feb 19 '23 18:02 kessler