yuanchuan / node-watch

A wrapper and enhancements for fs.watch
https://npm.im/node-watch
MIT License
341 stars 44 forks source link

Crash when trying to watch a non-existing network name on Windows #132

Open maksis opened 3 weeks ago

maksis commented 3 weeks ago

I'm trying to watch a non-existing network name (\\INVALID\Directory\) and the application crashes with the following stack trace:

Error: \\INVALID\Directory\ does not exist.
    at webpack:\airdcpp-share-monitor\node_modules\node-watch\lib\watch.js:494:1
    at processTicksAndRejections (node:internal/process/task_queues:85:11)

I checked that fs.stat in is.file

https://github.com/yuanchuan/node-watch/blob/bd85b602be49437dc49db46dfd3fa2548075a3ac/lib/watch.js#L534

throws the following error so the error emitter method is never being exposed:

code = 'UNKNOWN'
errno =-4094
path = '\\\\INVALID\\Folder\\'
syscall ='stat'
message = "UNKNOWN: unknown error, stat '\\\\INVALID\\Folder\\'"

I couldn't figure out that why checkStat only handles certain error codes safely and crashes the app on others.

https://github.com/yuanchuan/node-watch/blob/bd85b602be49437dc49db46dfd3fa2548075a3ac/lib/is.js#L14

maksis commented 3 weeks ago

I believe that the crash was avoided before https://github.com/yuanchuan/node-watch/commit/e22615667b0382925db2d46866ee76abb9e043b9 since I had the watch call inside a try..catch block but it no longer helps when process.nextTick is present