diff --git a/src/sbbs3/js_socket.c b/src/sbbs3/js_socket.c index e6a6d67d52f5b871e3c7f0005be38646ae637858..49222f15ad15354431bd662bcb4be0dc00a44070 100644 --- a/src/sbbs3/js_socket.c +++ b/src/sbbs3/js_socket.c @@ -532,29 +532,6 @@ js_sendfile(JSContext *cx, uintN argc, jsval *arglist) return(JS_TRUE); } -#if 0 - len=filelength(file); - /* TODO: Probobly too big for alloca()... also, this is insane. */ - if((buf=malloc(len))==NULL) { - close(file); - return(JS_TRUE); - } - if(read(file,buf,len)!=len) { - free(buf); - close(file); - return(JS_TRUE); - } - close(file); - - if(sendsocket(p->sock,buf,len)==len) { - dbprintf(FALSE, p, "sent %u bytes",len); - JS_SET_RVAL(cx, arglist, JSVAL_TRUE); - } else { - p->last_error=ERROR_VALUE; - dbprintf(TRUE, p, "send of %u bytes failed",len); - } - free(buf); -#else len = sendfilesocket(p->sock, file, NULL, 0); close(file); if(len > 0) { @@ -564,7 +541,6 @@ js_sendfile(JSContext *cx, uintN argc, jsval *arglist) p->last_error=ERROR_VALUE; dbprintf(TRUE, p, "send of %s failed",fname); } -#endif JS_RESUMEREQUEST(cx, rc); return(JS_TRUE); @@ -653,7 +629,7 @@ js_recv(JSContext *cx, uintN argc, jsval *arglist) if(argc && argv[0]!=JSVAL_VOID) JS_ValueToInt32(cx,argv[0],&len); - if((buf=(char*)alloca(len+1))==NULL) { + if((buf=(char*)malloc(len+1))==NULL) { JS_ReportError(cx,"Error allocating %u bytes",len+1); return(JS_FALSE); } @@ -664,19 +640,23 @@ js_recv(JSContext *cx, uintN argc, jsval *arglist) if(len<0) { p->last_error=ERROR_VALUE; JS_SET_RVAL(cx, arglist, JSVAL_NULL); + free(buf); return(JS_TRUE); } buf[len]=0; str = JS_NewStringCopyN(cx, buf, len); - if(str==NULL) + if(str==NULL) { + free(buf); return(JS_FALSE); + } JS_SET_RVAL(cx, arglist, STRING_TO_JSVAL(str)); rc=JS_SUSPENDREQUEST(cx); dbprintf(FALSE, p, "received %u bytes",len); JS_RESUMEREQUEST(cx, rc); + free(buf); return(JS_TRUE); } @@ -757,7 +737,7 @@ js_recvfrom(JSContext *cx, uintN argc, jsval *arglist) } else { /* String Data */ - if((buf=(char*)alloca(len+1))==NULL) { + if((buf=(char*)malloc(len+1))==NULL) { JS_ReportError(cx,"Error allocating %u bytes",len+1); return(JS_FALSE); } @@ -767,11 +747,13 @@ js_recvfrom(JSContext *cx, uintN argc, jsval *arglist) JS_RESUMEREQUEST(cx, rc); if(len<0) { p->last_error=ERROR_VALUE; + free(buf); return(JS_TRUE); } buf[len]=0; str = JS_NewStringCopyN(cx, buf, len); + free(buf); if(str==NULL) return(JS_FALSE); @@ -834,7 +816,7 @@ js_peek(JSContext *cx, uintN argc, jsval *arglist) if(argc && argv[0]!=JSVAL_VOID) JS_ValueToInt32(cx,argv[0],&len); - if((buf=(char*)alloca(len+1))==NULL) { + if((buf=(char*)malloc(len+1))==NULL) { JS_ReportError(cx,"Error allocating %u bytes",len+1); return(JS_FALSE); } @@ -844,11 +826,13 @@ js_peek(JSContext *cx, uintN argc, jsval *arglist) if(len<0) { p->last_error=ERROR_VALUE; JS_SET_RVAL(cx, arglist, JSVAL_NULL); + free(buf); return(JS_TRUE); } buf[len]=0; str = JS_NewStringCopyN(cx, buf, len); + free(buf); if(str==NULL) return(JS_FALSE); @@ -887,7 +871,7 @@ js_recvline(JSContext *cx, uintN argc, jsval *arglist) if(argc && argv[0]!=JSVAL_VOID) JS_ValueToInt32(cx,argv[0],&len); - if((buf=(char*)alloca(len+1))==NULL) { + if((buf=(char*)malloc(len+1))==NULL) { JS_ReportError(cx,"Error allocating %u bytes",len+1); return(JS_FALSE); } @@ -904,6 +888,7 @@ js_recvline(JSContext *cx, uintN argc, jsval *arglist) if(i==0) { JS_SET_RVAL(cx, arglist, JSVAL_NULL); JS_RESUMEREQUEST(cx, rc); + free(buf); return(JS_TRUE); /* socket closed */ } break; /* disconnected */ @@ -914,6 +899,7 @@ js_recvline(JSContext *cx, uintN argc, jsval *arglist) dbprintf(FALSE, p, "recvline timeout (received: %d)",i); JS_SET_RVAL(cx, arglist, JSVAL_NULL); JS_RESUMEREQUEST(cx, rc); + free(buf); return(JS_TRUE); /* time-out */ } continue; /* no data */ @@ -936,6 +922,7 @@ js_recvline(JSContext *cx, uintN argc, jsval *arglist) JS_RESUMEREQUEST(cx, rc); str = JS_NewStringCopyZ(cx, buf); + free(buf); if(str==NULL) return(JS_FALSE);