From efb2ce25c809a43c0169f930e172eadbc025b267 Mon Sep 17 00:00:00 2001 From: CharlesKWON Date: Tue, 16 Jun 2026 10:14:54 +0900 Subject: [PATCH] =?UTF-8?q?test(napi):=20napi=5Ffuzz=20PRG=20=E2=80=94=20e?= =?UTF-8?q?dge=20probes=20(large=20payload,=20NUL,=20binary)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- capi/napi_fuzz.prg | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 capi/napi_fuzz.prg diff --git a/capi/napi_fuzz.prg b/capi/napi_fuzz.prg new file mode 100644 index 0000000..f0811bf --- /dev/null +++ b/capi/napi_fuzz.prg @@ -0,0 +1,36 @@ +FUNCTION FN_HANDLE() + LOCAL hReq := hb_jsonDecode( FN_NAPI_REQ() ) + LOCAL cPath := hb_HGetDef( hReq, "path", "" ) + LOCAL oF := FN_REQUIRE( "/Users/charleskwon/fivenode/fivenode/fivenode/napi/test/fuzzmod" ) + LOCAL xR := NIL + LOCAL cErr := "" + LOCAL oErr + IF ! HB_ISOBJECT( oF ) + RETURN hb_jsonEncode( { "err" => FN_LASTERROR() } ) + ENDIF + BEGIN SEQUENCE + DO CASE + CASE cPath == "/big1m" + xR := oF:big( 1000000 ) + CASE cPath == "/big200k" + xR := oF:big( 200000 ) + CASE cPath == "/echo1m" + xR := oF:echo( Replicate( "y", 1000000 ) ) + CASE cPath == "/unicode" + xR := oF:unicode() + CASE cPath == "/binary" + xR := oF:binary() + OTHERWISE + xR := "noop" + ENDCASE + RECOVER USING oErr + cErr := IIF( HB_ISOBJECT( oErr ), oErr:Description, hb_CStr( oErr ) ) + END SEQUENCE + RETURN hb_jsonEncode( { ; + "status" => 200, ; + "headers" => { "Content-Type" => "application/json" }, ; + "body" => hb_jsonEncode( { ; + "type" => ValType( xR ), ; + "len" => IIF( xR == NIL, -1, Len( hb_CStr( xR ) ) ), ; + "head" => Left( hb_CStr( xR ), 30 ), ; + "err" => cErr } ) } )