From 1994bf8e60e3fb0d2ce3f541ce356d2145c0d1e8 Mon Sep 17 00:00:00 2001 From: "Rob Swindell (on Windows 11)" <rob@synchro.net> Date: Sat, 2 Mar 2024 16:12:09 -0800 Subject: [PATCH] More use of JS_ValueToECMAUint32 in place of JS_ValueToInt32 To support the full 32-bit range for things like dates/times, and message numbers (!). This should fix issue #732 Though dates beyond Feb 7 2106 are definitely going to still be an issue. I'll definitley look into solving that by the the 2100. --- src/sbbs3/js_msgbase.c | 68 +++++++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/src/sbbs3/js_msgbase.c b/src/sbbs3/js_msgbase.c index f4c3855590..e8d1f19566 100644 --- a/src/sbbs3/js_msgbase.c +++ b/src/sbbs3/js_msgbase.c @@ -868,15 +868,15 @@ static bool parse_header_object(JSContext* cx, private_t* p, JSObject* hdr, smbm /* Numeric Header Fields */ if(JS_GetProperty(cx, hdr, "attr", &val) && !JSVAL_NULL_OR_VOID(val)) { - if(!JS_ValueToInt32(cx,val,&i32)) + if(!JS_ValueToECMAUint32(cx,val,&u32)) goto err; - msg->hdr.attr=(ushort)i32; + msg->hdr.attr=(ushort)u32; msg->idx.attr=msg->hdr.attr; } if(JS_GetProperty(cx, hdr, "votes", &val) && !JSVAL_NULL_OR_VOID(val)) { - if(!JS_ValueToInt32(cx,val,&i32)) + if(!JS_ValueToECMAUint32(cx,val,&u32)) goto err; - msg->hdr.votes=(ushort)i32; + msg->hdr.votes=(ushort)u32; if(msg->hdr.type == SMB_MSG_TYPE_BALLOT) msg->idx.votes=msg->hdr.votes; } @@ -886,14 +886,14 @@ static bool parse_header_object(JSContext* cx, private_t* p, JSObject* hdr, smbm msg->hdr.auxattr=u32; } if(JS_GetProperty(cx, hdr, "netattr", &val) && !JSVAL_NULL_OR_VOID(val)) { - if(!JS_ValueToInt32(cx,val,&i32)) + if(!JS_ValueToECMAUint32(cx,val,&u32)) goto err; - msg->hdr.netattr=i32; + msg->hdr.netattr=u32; } if(JS_GetProperty(cx, hdr, "when_written_time", &val) && !JSVAL_NULL_OR_VOID(val)) { - if(!JS_ValueToInt32(cx,val,&i32)) + if(!JS_ValueToECMAUint32(cx,val,&u32)) goto err; - msg->hdr.when_written.time=i32; + msg->hdr.when_written.time=u32; } if(JS_GetProperty(cx, hdr, "when_written_zone", &val) && !JSVAL_NULL_OR_VOID(val)) { if(!JS_ValueToInt32(cx,val,&i32)) @@ -901,9 +901,9 @@ static bool parse_header_object(JSContext* cx, private_t* p, JSObject* hdr, smbm msg->hdr.when_written.zone=(short)i32; } if(JS_GetProperty(cx, hdr, "when_imported_time", &val) && !JSVAL_NULL_OR_VOID(val)) { - if(!JS_ValueToInt32(cx,val,&i32)) + if(!JS_ValueToECMAUint32(cx,val,&u32)) goto err; - msg->hdr.when_imported.time=i32; + msg->hdr.when_imported.time=u32; } if(JS_GetProperty(cx, hdr, "when_imported_zone", &val) && !JSVAL_NULL_OR_VOID(val)) { if(!JS_ValueToInt32(cx,val,&i32)) @@ -912,30 +912,30 @@ static bool parse_header_object(JSContext* cx, private_t* p, JSObject* hdr, smbm } if(JS_GetProperty(cx, hdr, "thread_id", &val) && !JSVAL_NULL_OR_VOID(val)) { - if(!JS_ValueToInt32(cx,val,&i32)) + if(!JS_ValueToECMAUint32(cx,val,&u32)) goto err; - msg->hdr.thread_id=i32; + msg->hdr.thread_id=u32; } if((JS_GetProperty(cx, hdr, "thread_orig", &val) && (!JSVAL_NULL_OR_VOID(val))) || (JS_GetProperty(cx, hdr, "thread_back", &val) && !JSVAL_NULL_OR_VOID(val))) { - if(!JS_ValueToInt32(cx,val,&i32)) + if(!JS_ValueToECMAUint32(cx,val,&u32)) goto err; - msg->hdr.thread_back=i32; + msg->hdr.thread_back=u32; } if(JS_GetProperty(cx, hdr, "thread_next", &val) && !JSVAL_NULL_OR_VOID(val)) { - if(!JS_ValueToInt32(cx,val,&i32)) + if(!JS_ValueToECMAUint32(cx,val,&u32)) goto err; - msg->hdr.thread_next=i32; + msg->hdr.thread_next=u32; } if(JS_GetProperty(cx, hdr, "thread_first", &val) && !JSVAL_NULL_OR_VOID(val)) { - if(!JS_ValueToInt32(cx,val,&i32)) + if(!JS_ValueToECMAUint32(cx,val,&u32)) goto err; - msg->hdr.thread_first=i32; + msg->hdr.thread_first=u32; } if(JS_GetProperty(cx, hdr, "delivery_attempts", &val) && !JSVAL_NULL_OR_VOID(val)) { - if(!JS_ValueToInt32(cx,val,&i32)) + if(!JS_ValueToECMAUint32(cx,val,&u32)) goto err; - msg->hdr.delivery_attempts=i32; + msg->hdr.delivery_attempts=u32; } if(JS_GetProperty(cx, hdr, "priority", &val) && !JSVAL_NULL_OR_VOID(val)) { @@ -986,9 +986,9 @@ static bool parse_header_object(JSContext* cx, private_t* p, JSObject* hdr, smbm } if(msg->hdr.number==0 && JS_GetProperty(cx, hdr, "number", &val) && !JSVAL_NULL_OR_VOID(val)) { - if(!JS_ValueToInt32(cx,val,&i32)) + if(!JS_ValueToECMAUint32(cx,val,&u32)) goto err; - msg->hdr.number=i32; + msg->hdr.number=u32; } if(cp) @@ -1143,7 +1143,7 @@ js_get_msg_index(JSContext *cx, uintN argc, jsval *arglist) return JS_FALSE; } else { /* Get by number */ - if(!JS_ValueToInt32(cx, argv[n], (int32*)&msg.hdr.number)) + if(!JS_ValueToECMAUint32(cx, argv[n], &msg.hdr.number)) return JS_FALSE; } } @@ -1750,7 +1750,7 @@ js_get_msg_header(JSContext *cx, uintN argc, jsval *arglist) } } else { /* Get by number */ - if(!JS_ValueToInt32(cx,argv[n++],(int32*)&(p->msg).hdr.number)) { + if(!JS_ValueToECMAUint32(cx,argv[n++],&(p->msg).hdr.number)) { free(p); return JS_FALSE; } @@ -2111,7 +2111,7 @@ js_put_msg_header(JSContext *cx, uintN argc, jsval *arglist) return JS_FALSE; } else { /* Get by number */ - if(!JS_ValueToInt32(cx,argv[n],(int32*)&msg.hdr.number)) + if(!JS_ValueToECMAUint32(cx,argv[n],&msg.hdr.number)) return JS_FALSE; } } else if(JSVAL_IS_STRING(argv[n])) { /* Get by ID */ @@ -2222,7 +2222,7 @@ js_remove_msg(JSContext *cx, uintN argc, jsval *arglist) return JS_FALSE; } else { /* Get by number */ - if(!JS_ValueToInt32(cx,argv[n],(int32*)&msg.hdr.number)) + if(!JS_ValueToECMAUint32(cx,argv[n],&msg.hdr.number)) return JS_FALSE; } msg_specified=JS_TRUE; @@ -2364,7 +2364,7 @@ js_get_msg_body(JSContext *cx, uintN argc, jsval *arglist) return JS_FALSE; } else { /* Get by number */ - if(!JS_ValueToInt32(cx,argv[n],(int32*)&msg.hdr.number)) + if(!JS_ValueToECMAUint32(cx,argv[n],&msg.hdr.number)) return JS_FALSE; } msg_specified=JS_TRUE; @@ -2478,7 +2478,7 @@ js_get_msg_tail(JSContext *cx, uintN argc, jsval *arglist) return JS_FALSE; } else { /* Get by number */ - if(!JS_ValueToInt32(cx,argv[n],(int32*)&msg.hdr.number)) + if(!JS_ValueToECMAUint32(cx,argv[n],&msg.hdr.number)) return JS_FALSE; } msg_specified=JS_TRUE; @@ -2843,7 +2843,7 @@ js_how_user_voted(JSContext *cx, uintN argc, jsval *arglist) { JSObject* obj=JS_THIS_OBJECT(cx, arglist); jsval* argv=JS_ARGV(cx, arglist); - int32 msgnum; + uint32 msgnum; private_t* p; char* name = NULL; uint16_t votes; @@ -2858,7 +2858,7 @@ js_how_user_voted(JSContext *cx, uintN argc, jsval *arglist) if(!SMB_IS_OPEN(&(p->smb))) return JS_TRUE; - if(!JS_ValueToInt32(cx, argv[0], &msgnum)) + if(!JS_ValueToECMAUint32(cx, argv[0], &msgnum)) return JS_FALSE; JSVALUE_TO_MSTRING(cx, argv[1], name, NULL) @@ -2881,7 +2881,7 @@ js_close_poll(JSContext *cx, uintN argc, jsval *arglist) { JSObject* obj=JS_THIS_OBJECT(cx, arglist); jsval* argv=JS_ARGV(cx, arglist); - int32 msgnum; + uint32 msgnum; private_t* p; char* name = NULL; int result; @@ -2899,7 +2899,7 @@ js_close_poll(JSContext *cx, uintN argc, jsval *arglist) if(!SMB_IS_OPEN(&(p->smb))) return JS_TRUE; - if(!JS_ValueToInt32(cx, argv[0], &msgnum)) + if(!JS_ValueToECMAUint32(cx, argv[0], &msgnum)) return JS_FALSE; JSVALUE_TO_MSTRING(cx, argv[1], name, NULL) @@ -2951,11 +2951,11 @@ static JSBool js_msgbase_set(JSContext *cx, JSObject *obj, jsid id, JSBool stric switch(tiny) { case SMB_PROP_RETRY_TIME: - if(!JS_ValueToInt32(cx,*vp,(int32*)&(p->smb).retry_time)) + if(!JS_ValueToECMAUint32(cx,*vp,&(p->smb).retry_time)) return JS_FALSE; break; case SMB_PROP_RETRY_DELAY: - if(!JS_ValueToInt32(cx,*vp,(int32*)&(p->smb).retry_delay)) + if(!JS_ValueToECMAUint32(cx,*vp,&(p->smb).retry_delay)) return JS_FALSE; break; case SMB_PROP_DEBUG: -- GitLab