Skip to content
Snippets Groups Projects
Commit 51611a0c authored by rswindell's avatar rswindell
Browse files

Methods and property setter return false (immediately terminating script) if

JS_ValueToInt32 fails - could this've been the cause of Deuce's mysterious
file.read() problems?
parent eecbea50
No related branches found
No related tags found
No related merge requests found
...@@ -154,8 +154,10 @@ js_open(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) ...@@ -154,8 +154,10 @@ js_open(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
mode=JS_GetStringBytes(str); mode=JS_GetStringBytes(str);
} else if(JSVAL_IS_BOOLEAN(argv[i])) /* shareable */ } else if(JSVAL_IS_BOOLEAN(argv[i])) /* shareable */
shareable=JSVAL_TO_BOOLEAN(argv[i]); shareable=JSVAL_TO_BOOLEAN(argv[i]);
else if(JSVAL_IS_NUMBER(argv[i])) /* bufsize */ else if(JSVAL_IS_NUMBER(argv[i])) { /* bufsize */
JS_ValueToInt32(cx,argv[i],&bufsize); if(!JS_ValueToInt32(cx,argv[i],&bufsize))
return(JS_FALSE);
}
} }
SAFECOPY(p->mode,mode); SAFECOPY(p->mode,mode);
...@@ -224,9 +226,10 @@ js_read(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) ...@@ -224,9 +226,10 @@ js_read(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
if(p->fp==NULL) if(p->fp==NULL)
return(JS_TRUE); return(JS_TRUE);
if(argc) if(argc) {
JS_ValueToInt32(cx,argv[0],&len); if(!JS_ValueToInt32(cx,argv[0],&len))
else { return(JS_FALSE);
} else {
len=filelength(fileno(p->fp)); len=filelength(fileno(p->fp));
offset=ftell(p->fp); offset=ftell(p->fp);
if(offset>0) if(offset>0)
...@@ -303,8 +306,10 @@ js_readln(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) ...@@ -303,8 +306,10 @@ js_readln(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
if(p->fp==NULL) if(p->fp==NULL)
return(JS_TRUE); return(JS_TRUE);
if(argc) if(argc) {
JS_ValueToInt32(cx,argv[0],&len); if(!JS_ValueToInt32(cx,argv[0],&len))
return(JS_FALSE);
}
if((buf=malloc(len))==NULL) if((buf=malloc(len))==NULL)
return(JS_TRUE); return(JS_TRUE);
...@@ -348,8 +353,10 @@ js_readbin(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) ...@@ -348,8 +353,10 @@ js_readbin(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
if(p->fp==NULL) if(p->fp==NULL)
return(JS_TRUE); return(JS_TRUE);
if(argc) if(argc) {
JS_ValueToInt32(cx,argv[0],(int32*)&size); if(!JS_ValueToInt32(cx,argv[0],(int32*)&size))
return(JS_FALSE);
}
switch(size) { switch(size) {
case sizeof(BYTE): case sizeof(BYTE):
...@@ -510,7 +517,8 @@ js_iniGetValue(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rva ...@@ -510,7 +517,8 @@ js_iniGetValue(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rva
break; break;
default: default:
if(JSVAL_IS_NUMBER(dflt)) { if(JSVAL_IS_NUMBER(dflt)) {
JS_ValueToInt32(cx,dflt,&i); if(!JS_ValueToInt32(cx,dflt,&i))
return(JS_FALSE);
JS_NewNumberValue(cx,iniReadInteger(p->fp,section,key,i),rval); JS_NewNumberValue(cx,iniReadInteger(p->fp,section,key,i),rval);
} else } else
*rval = STRING_TO_JSVAL(JS_NewStringCopyZ(cx *rval = STRING_TO_JSVAL(JS_NewStringCopyZ(cx
...@@ -563,7 +571,8 @@ js_iniSetValue(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rva ...@@ -563,7 +571,8 @@ js_iniSetValue(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rva
break; break;
default: default:
if(JSVAL_IS_NUMBER(value)) { if(JSVAL_IS_NUMBER(value)) {
JS_ValueToInt32(cx,value,&i); if(!JS_ValueToInt32(cx,value,&i))
return(JS_FALSE);
result = iniSetInteger(&list,section,key,i,NULL); result = iniSetInteger(&list,section,key,i,NULL);
} else { } else {
if(JSVAL_IS_OBJECT(value) if(JSVAL_IS_OBJECT(value)
...@@ -880,7 +889,8 @@ js_write(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) ...@@ -880,7 +889,8 @@ js_write(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
tlen=len; tlen=len;
if(argc>1) { if(argc>1) {
JS_ValueToInt32(cx,argv[1],(int32*)&tlen); if(!JS_ValueToInt32(cx,argv[1],(int32*)&tlen))
return(JS_FALSE);
if(len>tlen) if(len>tlen)
len=tlen; len=tlen;
} }
...@@ -962,9 +972,12 @@ js_writebin(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) ...@@ -962,9 +972,12 @@ js_writebin(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
if(p->fp==NULL) if(p->fp==NULL)
return(JS_TRUE); return(JS_TRUE);
JS_ValueToInt32(cx,argv[0],&val); if(!JS_ValueToInt32(cx,argv[0],&val))
if(argc>1) return(JS_FALSE);
JS_ValueToInt32(cx,argv[1],(int32*)&size); if(argc>1) {
if(!JS_ValueToInt32(cx,argv[1],(int32*)&size))
return(JS_FALSE);
}
switch(size) { switch(size) {
case sizeof(BYTE): case sizeof(BYTE):
...@@ -1055,12 +1068,16 @@ js_lock(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) ...@@ -1055,12 +1068,16 @@ js_lock(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
return(JS_TRUE); return(JS_TRUE);
/* offset */ /* offset */
if(argc) if(argc) {
JS_ValueToInt32(cx,argv[0],&offset); if(!JS_ValueToInt32(cx,argv[0],&offset))
return(JS_FALSE);
}
/* length */ /* length */
if(argc>1) if(argc>1) {
JS_ValueToInt32(cx,argv[1],&len); if(!JS_ValueToInt32(cx,argv[1],&len))
return(JS_FALSE);
}
if(len==0) if(len==0)
len=filelength(fileno(p->fp))-offset; len=filelength(fileno(p->fp))-offset;
...@@ -1089,12 +1106,16 @@ js_unlock(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) ...@@ -1089,12 +1106,16 @@ js_unlock(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
return(JS_TRUE); return(JS_TRUE);
/* offset */ /* offset */
if(argc) if(argc) {
JS_ValueToInt32(cx,argv[0],&offset); if(!JS_ValueToInt32(cx,argv[0],&offset))
return(JS_FALSE);
}
/* length */ /* length */
if(argc>1) if(argc>1) {
JS_ValueToInt32(cx,argv[1],&len); if(!JS_ValueToInt32(cx,argv[1],&len))
return(JS_FALSE);
}
if(len==0) if(len==0)
len=filelength(fileno(p->fp))-offset; len=filelength(fileno(p->fp))-offset;
...@@ -1301,26 +1322,31 @@ static JSBool js_file_set(JSContext *cx, JSObject *obj, jsval id, jsval *vp) ...@@ -1301,26 +1322,31 @@ static JSBool js_file_set(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
break; break;
case FILE_PROP_POSITION: case FILE_PROP_POSITION:
if(p->fp!=NULL) { if(p->fp!=NULL) {
JS_ValueToInt32(cx,*vp,&i); if(!JS_ValueToInt32(cx,*vp,&i))
return(JS_FALSE);
fseek(p->fp,i,SEEK_SET); fseek(p->fp,i,SEEK_SET);
} }
break; break;
case FILE_PROP_DATE: case FILE_PROP_DATE:
JS_ValueToInt32(cx,*vp,&i); if(!JS_ValueToInt32(cx,*vp,&i))
return(JS_FALSE);
setfdate(p->name,i); setfdate(p->name,i);
break; break;
case FILE_PROP_LENGTH: case FILE_PROP_LENGTH:
if(p->fp!=NULL) { if(p->fp!=NULL) {
JS_ValueToInt32(cx,*vp,&i); if(!JS_ValueToInt32(cx,*vp,&i))
return(JS_FALSE);
chsize(fileno(p->fp),i); chsize(fileno(p->fp),i);
} }
break; break;
case FILE_PROP_ATTRIBUTES: case FILE_PROP_ATTRIBUTES:
JS_ValueToInt32(cx,*vp,&i); if(!JS_ValueToInt32(cx,*vp,&i))
return(JS_FALSE);
CHMOD(p->name,i); CHMOD(p->name,i);
break; break;
case FILE_PROP_ETX: case FILE_PROP_ETX:
JS_ValueToInt32(cx,*vp,&i); if(!JS_ValueToInt32(cx,*vp,&i))
return(JS_FALSE);
p->etx = (uchar)i; p->etx = (uchar)i;
break; break;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment