bare-ssh2 parses SFTP handles via bufferSlice/safer-buffer — handles are often

Uint8Array views that fail Buffer.isBuffer; READ/CLOSE/FSTAT/WRITE/READDIR were
rejecting every request with SSH_FX_FAILURE. Add sftpHandleId() using DataView.

OPEN: fix inner try indentation. CHANGELOG: note handle decoding + earlier SFTP
hardening (vfs normalize, enqueueSftpReply, Protocol/SFTP DATA coerce).
This commit is contained in:
Raven Scott
2026-04-21 18:22:32 -04:00
parent ac699f308e
commit 36492de3d9
11 changed files with 426 additions and 408 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
{
"schema": 2,
"profileId": "bare-os-posix-like",
"generatedAt": "2026-04-21T22:11:56.311Z",
"generatedAt": "2026-04-21T22:22:05.245Z",
"note": "Sparse POSIX Issue 7 coverage hints for /bin utilities. Omitted command names are not yet profiled here.",
"commandIndex": [
{
+196 -196
View File
@@ -25,12 +25,6 @@
"compactEncoding"
]
},
{
"path": "/lib/bare/bundles/bareUrl.js",
"keys": [
"bareUrl"
]
},
{
"path": "/lib/bare/bundles/protomux.js",
"keys": [
@@ -38,9 +32,9 @@
]
},
{
"path": "/lib/bare/bundles/bareEvents.js",
"path": "/lib/bare/bundles/bareUrl.js",
"keys": [
"bareEvents"
"bareUrl"
]
},
{
@@ -55,6 +49,12 @@
"barePath"
]
},
{
"path": "/lib/bare/bundles/bareEvents.js",
"keys": [
"bareEvents"
]
},
{
"path": "/lib/bare/bundles/bareAbort.js",
"keys": [
@@ -73,6 +73,12 @@
"bareAddonResolve"
]
},
{
"path": "/lib/bare/bundles/bareAnsiEscapes.js",
"keys": [
"bareAnsiEscapes"
]
},
{
"path": "/lib/bare/bundles/bareReadline.js",
"keys": [
@@ -86,15 +92,9 @@
]
},
{
"path": "/lib/bare/bundles/bareAnsiEscapes.js",
"path": "/lib/bare/bundles/bareAppKit.js",
"keys": [
"bareAnsiEscapes"
]
},
{
"path": "/lib/bare/bundles/fetch.js",
"keys": [
"fetch"
"bareAppKit"
]
},
{
@@ -104,9 +104,9 @@
]
},
{
"path": "/lib/bare/bundles/bareAppKit.js",
"path": "/lib/bare/bundles/bareAtomics.js",
"keys": [
"bareAppKit"
"bareAtomics"
]
},
{
@@ -116,27 +116,9 @@
]
},
{
"path": "/lib/bare/bundles/bareAtomics.js",
"path": "/lib/bare/bundles/fetch.js",
"keys": [
"bareAtomics"
]
},
{
"path": "/lib/bare/bundles/bareBmp.js",
"keys": [
"bareBmp"
]
},
{
"path": "/lib/bare/bundles/bareBuffer.js",
"keys": [
"bareBuffer"
]
},
{
"path": "/lib/bare/bundles/bareBundle.js",
"keys": [
"bareBundle"
"fetch"
]
},
{
@@ -145,12 +127,30 @@
"bareApk"
]
},
{
"path": "/lib/bare/bundles/bareBmp.js",
"keys": [
"bareBmp"
]
},
{
"path": "/lib/bare/bundles/bareBluetoothApple.js",
"keys": [
"bareBluetoothApple"
]
},
{
"path": "/lib/bare/bundles/bareBundle.js",
"keys": [
"bareBundle"
]
},
{
"path": "/lib/bare/bundles/bareBuffer.js",
"keys": [
"bareBuffer"
]
},
{
"path": "/lib/bare/bundles/bareBundleCompile.js",
"keys": [
@@ -163,24 +163,18 @@
"bareConsole"
]
},
{
"path": "/lib/bare/bundles/bareBundleEvaluate.js",
"keys": [
"bareBundleEvaluate"
]
},
{
"path": "/lib/bare/bundles/bareBoot.js",
"keys": [
"bareBoot"
]
},
{
"path": "/lib/bare/bundles/bareChannel.js",
"keys": [
"bareChannel"
]
},
{
"path": "/lib/bare/bundles/bareBundleEvaluate.js",
"keys": [
"bareBundleEvaluate"
]
},
{
"path": "/lib/bare/bundles/bareDebugLog.js",
"keys": [
@@ -194,9 +188,9 @@
]
},
{
"path": "/lib/bare/bundles/bareCov.js",
"path": "/lib/bare/bundles/bareBoot.js",
"keys": [
"bareCov"
"bareBoot"
]
},
{
@@ -205,6 +199,18 @@
"bareBundleId"
]
},
{
"path": "/lib/bare/bundles/bareCov.js",
"keys": [
"bareCov"
]
},
{
"path": "/lib/bare/bundles/bareDaemon.js",
"keys": [
"bareDaemon"
]
},
{
"path": "/lib/bare/bundles/bareDns.js",
"keys": [
@@ -218,9 +224,9 @@
]
},
{
"path": "/lib/bare/bundles/bareDaemon.js",
"path": "/lib/bare/bundles/bareEnv.js",
"keys": [
"bareDaemon"
"bareEnv"
]
},
{
@@ -230,9 +236,9 @@
]
},
{
"path": "/lib/bare/bundles/bareEnv.js",
"path": "/lib/bare/bundles/bareFfmpeg.js",
"keys": [
"bareEnv"
"bareFfmpeg"
]
},
{
@@ -241,12 +247,6 @@
"bareDgram"
]
},
{
"path": "/lib/bare/bundles/bareFfmpeg.js",
"keys": [
"bareFfmpeg"
]
},
{
"path": "/lib/bare/bundles/bareFfmpegEncodings.js",
"keys": [
@@ -259,12 +259,6 @@
"bareFormat"
]
},
{
"path": "/lib/bare/bundles/bareFormData.js",
"keys": [
"bareFormData"
]
},
{
"path": "/lib/bare/bundles/bareGif.js",
"keys": [
@@ -272,9 +266,15 @@
]
},
{
"path": "/lib/bare/bundles/bareGtk.js",
"path": "/lib/bare/bundles/bareFormData.js",
"keys": [
"bareGtk"
"bareFormData"
]
},
{
"path": "/lib/bare/bundles/bareFileLogger.js",
"keys": [
"bareFileLogger"
]
},
{
@@ -284,15 +284,15 @@
]
},
{
"path": "/lib/bare/bundles/bareHrtime.js",
"path": "/lib/bare/bundles/bareGtk.js",
"keys": [
"bareHrtime"
"bareGtk"
]
},
{
"path": "/lib/bare/bundles/bareFileLogger.js",
"path": "/lib/bare/bundles/bareHrtime.js",
"keys": [
"bareFileLogger"
"bareHrtime"
]
},
{
@@ -313,18 +313,18 @@
"bareIco"
]
},
{
"path": "/lib/bare/bundles/bareImageResample.js",
"keys": [
"bareImageResample"
]
},
{
"path": "/lib/bare/bundles/bareHttp1.js",
"keys": [
"bareHttp1"
]
},
{
"path": "/lib/bare/bundles/bareImageResample.js",
"keys": [
"bareImageResample"
]
},
{
"path": "/lib/bare/bundles/bareHttps.js",
"keys": [
@@ -373,6 +373,12 @@
"bareLief"
]
},
{
"path": "/lib/bare/bundles/bareMake.js",
"keys": [
"bareMake"
]
},
{
"path": "/lib/bare/bundles/bareLink.js",
"keys": [
@@ -380,9 +386,9 @@
]
},
{
"path": "/lib/bare/bundles/bareMake.js",
"path": "/lib/bare/bundles/bareModuleResolve.js",
"keys": [
"bareMake"
"bareModuleResolve"
]
},
{
@@ -404,9 +410,9 @@
]
},
{
"path": "/lib/bare/bundles/bareModuleResolve.js",
"path": "/lib/bare/bundles/bareNative.js",
"keys": [
"bareModuleResolve"
"bareNative"
]
},
{
@@ -421,18 +427,6 @@
"bareNodeFetch"
]
},
{
"path": "/lib/bare/bundles/bareNative.js",
"keys": [
"bareNative"
]
},
{
"path": "/lib/bare/bundles/bareOpen.js",
"keys": [
"bareOpen"
]
},
{
"path": "/lib/bare/bundles/bareModuleTraverse.js",
"keys": [
@@ -445,12 +439,6 @@
"bareNet"
]
},
{
"path": "/lib/bare/bundles/bareDev.js",
"keys": [
"bareDev"
]
},
{
"path": "/lib/bare/bundles/bareOs.js",
"keys": [
@@ -458,9 +446,9 @@
]
},
{
"path": "/lib/bare/bundles/barePng.js",
"path": "/lib/bare/bundles/bareOpen.js",
"keys": [
"barePng"
"bareOpen"
]
},
{
@@ -470,9 +458,9 @@
]
},
{
"path": "/lib/bare/bundles/bareNodeRuntime.js",
"path": "/lib/bare/bundles/barePng.js",
"keys": [
"bareNodeRuntime"
"barePng"
]
},
{
@@ -482,9 +470,15 @@
]
},
{
"path": "/lib/bare/bundles/barePunycode.js",
"path": "/lib/bare/bundles/barePackDrive.js",
"keys": [
"barePunycode"
"barePackDrive"
]
},
{
"path": "/lib/bare/bundles/bareNodeRuntime.js",
"keys": [
"bareNodeRuntime"
]
},
{
@@ -493,6 +487,12 @@
"barePack"
]
},
{
"path": "/lib/bare/bundles/barePrebuild.js",
"keys": [
"barePrebuild"
]
},
{
"path": "/lib/bare/bundles/bareProcess.js",
"keys": [
@@ -500,15 +500,15 @@
]
},
{
"path": "/lib/bare/bundles/barePackDrive.js",
"path": "/lib/bare/bundles/bareDev.js",
"keys": [
"barePackDrive"
"bareDev"
]
},
{
"path": "/lib/bare/bundles/barePrebuild.js",
"path": "/lib/bare/bundles/barePunycode.js",
"keys": [
"barePrebuild"
"barePunycode"
]
},
{
@@ -517,12 +517,6 @@
"bareQuerystring"
]
},
{
"path": "/lib/bare/bundles/bareQueueMicrotask.js",
"keys": [
"bareQueueMicrotask"
]
},
{
"path": "/lib/bare/bundles/bareRealm.js",
"keys": [
@@ -530,21 +524,9 @@
]
},
{
"path": "/lib/bare/bundles/bareSdl.js",
"path": "/lib/bare/bundles/bareQueueMicrotask.js",
"keys": [
"bareSdl"
]
},
{
"path": "/lib/bare/bundles/bareRpc.js",
"keys": [
"bareRpc"
]
},
{
"path": "/lib/bare/bundles/barePromClient.js",
"keys": [
"barePromClient"
"bareQueueMicrotask"
]
},
{
@@ -553,6 +535,18 @@
"bareRuntime"
]
},
{
"path": "/lib/bare/bundles/bareSdl.js",
"keys": [
"bareSdl"
]
},
{
"path": "/lib/bare/bundles/barePromClient.js",
"keys": [
"barePromClient"
]
},
{
"path": "/lib/bare/bundles/bareSemver.js",
"keys": [
@@ -560,9 +554,9 @@
]
},
{
"path": "/lib/bare/bundles/bareRepl.js",
"path": "/lib/bare/bundles/bareRpc.js",
"keys": [
"bareRepl"
"bareRpc"
]
},
{
@@ -572,15 +566,9 @@
]
},
{
"path": "/lib/bare/bundles/bareRun.js",
"path": "/lib/bare/bundles/bareRepl.js",
"keys": [
"bareRun"
]
},
{
"path": "/lib/bare/bundles/bareStdio.js",
"keys": [
"bareStdio"
"bareRepl"
]
},
{
@@ -589,12 +577,24 @@
"bareStringDecoder"
]
},
{
"path": "/lib/bare/bundles/bareRun.js",
"keys": [
"bareRun"
]
},
{
"path": "/lib/bare/bundles/bareSidecar.js",
"keys": [
"bareSidecar"
]
},
{
"path": "/lib/bare/bundles/bareStdio.js",
"keys": [
"bareStdio"
]
},
{
"path": "/lib/bare/bundles/bareStream.js",
"keys": [
@@ -602,9 +602,9 @@
]
},
{
"path": "/lib/bare/bundles/bareStructuredClone.js",
"path": "/lib/bare/bundles/bareStorage.js",
"keys": [
"bareStructuredClone"
"bareStorage"
]
},
{
@@ -614,15 +614,9 @@
]
},
{
"path": "/lib/bare/bundles/bareStorage.js",
"path": "/lib/bare/bundles/bareSystemLogger.js",
"keys": [
"bareStorage"
]
},
{
"path": "/lib/bare/bundles/bareSubprocess.js",
"keys": [
"bareSubprocess"
"bareSystemLogger"
]
},
{
@@ -632,9 +626,9 @@
]
},
{
"path": "/lib/bare/bundles/bareSystemLogger.js",
"path": "/lib/bare/bundles/bareStructuredClone.js",
"keys": [
"bareSystemLogger"
"bareStructuredClone"
]
},
{
@@ -643,18 +637,6 @@
"bareTiff"
]
},
{
"path": "/lib/bare/bundles/bareTimers.js",
"keys": [
"bareTimers"
]
},
{
"path": "/lib/bare/bundles/bareTpl.js",
"keys": [
"bareTpl"
]
},
{
"path": "/lib/bare/bundles/bareTcp.js",
"keys": [
@@ -662,9 +644,15 @@
]
},
{
"path": "/lib/bare/bundles/bareType.js",
"path": "/lib/bare/bundles/bareTimers.js",
"keys": [
"bareType"
"bareTimers"
]
},
{
"path": "/lib/bare/bundles/bareSubprocess.js",
"keys": [
"bareSubprocess"
]
},
{
@@ -674,15 +662,15 @@
]
},
{
"path": "/lib/bare/bundles/bareTty.js",
"path": "/lib/bare/bundles/bareTpl.js",
"keys": [
"bareTty"
"bareTpl"
]
},
{
"path": "/lib/bare/bundles/bareUiKit.js",
"path": "/lib/bare/bundles/bareType.js",
"keys": [
"bareUiKit"
"bareType"
]
},
{
@@ -692,15 +680,15 @@
]
},
{
"path": "/lib/bare/bundles/bareUnpack.js",
"path": "/lib/bare/bundles/bareUiKit.js",
"keys": [
"bareUnpack"
"bareUiKit"
]
},
{
"path": "/lib/bare/bundles/bareWalkHandles.js",
"path": "/lib/bare/bundles/bareUnpack.js",
"keys": [
"bareWalkHandles"
"bareUnpack"
]
},
{
@@ -710,15 +698,15 @@
]
},
{
"path": "/lib/bare/bundles/bareVm.js",
"path": "/lib/bare/bundles/bareTty.js",
"keys": [
"bareVm"
"bareTty"
]
},
{
"path": "/lib/bare/bundles/bareWebp.js",
"path": "/lib/bare/bundles/bareVm.js",
"keys": [
"bareWebp"
"bareVm"
]
},
{
@@ -728,15 +716,9 @@
]
},
{
"path": "/lib/bare/bundles/bareWebKitGtk.js",
"path": "/lib/bare/bundles/bareWalkHandles.js",
"keys": [
"bareWebKitGtk"
]
},
{
"path": "/lib/bare/bundles/bareUnionBundle.js",
"keys": [
"bareUnionBundle"
"bareWalkHandles"
]
},
{
@@ -745,12 +727,30 @@
"bareUtils"
]
},
{
"path": "/lib/bare/bundles/bareWebp.js",
"keys": [
"bareWebp"
]
},
{
"path": "/lib/bare/bundles/bareWebKitGtk.js",
"keys": [
"bareWebKitGtk"
]
},
{
"path": "/lib/bare/bundles/bareV8ToIstanbul.js",
"keys": [
"bareV8ToIstanbul"
]
},
{
"path": "/lib/bare/bundles/bareUnionBundle.js",
"keys": [
"bareUnionBundle"
]
},
{
"path": "/lib/bare/bundles/bareWinUi.js",
"keys": [
@@ -775,12 +775,6 @@
"bareZlib"
]
},
{
"path": "/lib/bare/bundles/bareZmq.js",
"keys": [
"bareZmq"
]
},
{
"path": "/lib/bare/bundles/bareWs.js",
"keys": [
@@ -793,6 +787,12 @@
"bareWorker"
]
},
{
"path": "/lib/bare/bundles/bareZmq.js",
"keys": [
"bareZmq"
]
},
{
"path": "/lib/bare/bundles/holesail.js",
"keys": [
@@ -1607,8 +1607,8 @@
],
"bundleProvenance": {
"schemaVersion": 1,
"generatedAt": "2026-04-21T22:11:57.514Z",
"gitCommit": "baae7b34821921606d1995b3a4365d307577b662",
"generatedAt": "2026-04-21T22:22:06.392Z",
"gitCommit": "ac699f308e3cea5a2599e937bfd261816999d517",
"nodeVersion": "v20.20.2",
"bundleTier": "all",
"normativeManifest": "packages/bare-os-booter/lib/bare-module-manifest.json",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"schema": 1,
"atMs": 1776809516310,
"atMs": 1776810125245,
"commands": [
"arch",
"awk",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"generatedAt": "2026-04-21T22:11:56.476Z",
"generatedAt": "2026-04-21T22:22:05.396Z",
"pages": [
{
"name": "arch",