From 90dc709de43fcf6beee2d0d10e9f85f2940676fc Mon Sep 17 00:00:00 2001
From: "Rob Swindell (on Debian Linux)" <rob@synchro.net>
Date: Mon, 20 Feb 2023 14:10:50 -0800
Subject: [PATCH] Fix (false pos?) warnings in use of JSVALUE_TO_ASTRING only
 in RELEASE builds
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

using gcc version 12.2.0 (Debian 12.2.0-14), e.g.

js_console.cpp: In function ‘JSBool js_handle_ctrlkey(JSContext*, uintN, jsval*)’:
sbbs.h:230:56: warning: writing 8 bytes into a region of size 2 [-Wstringop-overflow=]
  230 |                                         (ret)[JSSTSpos]=(char)JSSTSstrval[JSSTSpos]; \
      |                                         ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
sbbs.h:242:9: note: in expansion of macro ‘JSSTRING_TO_ASTRING’
  242 |         JSSTRING_TO_ASTRING((cx), JSVTSstr, (ret), (maxsize), (lenptr)); \
      |         ^~~~~~~~~~~~~~~~~~~
js_console.cpp:670:17: note: in expansion of macro ‘JSVALUE_TO_ASTRING’
  670 |                 JSVALUE_TO_ASTRING(cx, argv[0], keystr, 2, NULL);
      |                 ^~~~~~~~~~~~~~~~~~
In file included from sbbs.h:255:
/home/rswindell/sbbs/src/sbbs3/../xpdev/genwrap.h:77:36: note: destination object of size 2 allocated by ‘__builtin_alloca’
   77 | #define alloca(sz) __builtin_alloca(sz)
      |                    ~~~~~~~~~~~~~~~~^~~~
sbbs.h:228:43: note: in expansion of macro ‘alloca’
  228 |                         if(((ret)=(char *)alloca((*JSSTSlenptr)+1))) { \
      |                                           ^~~~~~
sbbs.h:242:9: note: in expansion of macro ‘JSSTRING_TO_ASTRING’
  242 |         JSSTRING_TO_ASTRING((cx), JSVTSstr, (ret), (maxsize), (lenptr)); \
      |         ^~~~~~~~~~~~~~~~~~~
js_console.cpp:670:17: note: in expansion of macro ‘JSVALUE_TO_ASTRING’
  670 |                 JSVALUE_TO_ASTRING(cx, argv[0], keystr, 2, NULL);
      |                 ^~~~~~~~~~~~~~~~~~
sbbs.h:230:56: warning: writing 1 byte into a region of size 0 [-Wstringop-overflow=]
  230 |                                         (ret)[JSSTSpos]=(char)JSSTSstrval[JSSTSpos]; \
      |                                         ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
sbbs.h:242:9: note: in expansion of macro ‘JSSTRING_TO_ASTRING’
  242 |         JSSTRING_TO_ASTRING((cx), JSVTSstr, (ret), (maxsize), (lenptr)); \
      |         ^~~~~~~~~~~~~~~~~~~
js_console.cpp:670:17: note: in expansion of macro ‘JSVALUE_TO_ASTRING’
  670 |                 JSVALUE_TO_ASTRING(cx, argv[0], keystr, 2, NULL);
      |                 ^~~~~~~~~~~~~~~~~~
/home/rswindell/sbbs/src/sbbs3/../xpdev/genwrap.h:77:36: note: at offset 2 into destination object of size 2 allocated by ‘__builtin_alloca’
   77 | #define alloca(sz) __builtin_alloca(sz)
      |                    ~~~~~~~~~~~~~~~~^~~~
sbbs.h:228:43: note: in expansion of macro ‘alloca’
  228 |                         if(((ret)=(char *)alloca((*JSSTSlenptr)+1))) { \
      |                                           ^~~~~~
sbbs.h:242:9: note: in expansion of macro ‘JSSTRING_TO_ASTRING’
  242 |         JSSTRING_TO_ASTRING((cx), JSVTSstr, (ret), (maxsize), (lenptr)); \
      |         ^~~~~~~~~~~~~~~~~~~
js_console.cpp:670:17: note: in expansion of macro ‘JSVALUE_TO_ASTRING’
  670 |                 JSVALUE_TO_ASTRING(cx, argv[0], keystr, 2, NULL);
      |                 ^~~~~~~~~~~~~~~~~~
/home/rswindell/sbbs/src/sbbs3/../xpdev/genwrap.h:77:36: note: at offset 2 into destination object of size 2 allocated by ‘__builtin_alloca’
   77 | #define alloca(sz) __builtin_alloca(sz)
      |                    ~~~~~~~~~~~~~~~~^~~~
sbbs.h:228:43: note: in expansion of macro ‘alloca’
  228 |                         if(((ret)=(char *)alloca((*JSSTSlenptr)+1))) { \
      |                                           ^~~~~~
sbbs.h:242:9: note: in expansion of macro ‘JSSTRING_TO_ASTRING’
  242 |         JSSTRING_TO_ASTRING((cx), JSVTSstr, (ret), (maxsize), (lenptr)); \
      |         ^~~~~~~~~~~~~~~~~~~
js_console.cpp:670:17: note: in expansion of macro ‘JSVALUE_TO_ASTRING’
  670 |                 JSVALUE_TO_ASTRING(cx, argv[0], keystr, 2, NULL);
      |                 ^~~~~~~~~~~~~~~~~~
/home/rswindell/sbbs/src/sbbs3/../xpdev/genwrap.h:77:36: note: at offset 2 into destination object of size [1, 2] allocated by ‘__builtin_alloca’
   77 | #define alloca(sz) __builtin_alloca(sz)
      |                    ~~~~~~~~~~~~~~~~^~~~
sbbs.h:228:43: note: in expansion of macro ‘alloca’
  228 |                         if(((ret)=(char *)alloca((*JSSTSlenptr)+1))) { \
      |                                           ^~~~~~
sbbs.h:242:9: note: in expansion of macro ‘JSSTRING_TO_ASTRING’
  242 |         JSSTRING_TO_ASTRING((cx), JSVTSstr, (ret), (maxsize), (lenptr)); \
      |         ^~~~~~~~~~~~~~~~~~~
js_console.cpp:670:17: note: in expansion of macro ‘JSVALUE_TO_ASTRING’
  670 |                 JSVALUE_TO_ASTRING(cx, argv[0], keystr, 2, NULL);
      |                 ^~~~~~~~~~~~~~~~~~
sbbs.h:230:56: warning: writing 1 byte into a region of size 0 [-Wstringop-overflow=]
  230 |                                         (ret)[JSSTSpos]=(char)JSSTSstrval[JSSTSpos]; \
      |                                         ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
sbbs.h:242:9: note: in expansion of macro ‘JSSTRING_TO_ASTRING’
  242 |         JSSTRING_TO_ASTRING((cx), JSVTSstr, (ret), (maxsize), (lenptr)); \
      |         ^~~~~~~~~~~~~~~~~~~
---
 src/sbbs3/js_bbs.cpp     | 4 ++--
 src/sbbs3/js_console.cpp | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/sbbs3/js_bbs.cpp b/src/sbbs3/js_bbs.cpp
index 0cc330a53a..c0ff9aff3f 100644
--- a/src/sbbs3/js_bbs.cpp
+++ b/src/sbbs3/js_bbs.cpp
@@ -2222,7 +2222,7 @@ js_sendfile(JSContext *cx, uintN argc, jsval *arglist)
 		return(JS_FALSE);
 
 	if(argc>1) {
-		JSVALUE_TO_ASTRING(cx, argv[1], p, 2, NULL);
+		JSVALUE_TO_ASTRING(cx, argv[1], p, 8, NULL);
 		if(p!=NULL)
 			prot=*p;
 		uintN argn = 2;
@@ -2271,7 +2271,7 @@ js_recvfile(JSContext *cx, uintN argc, jsval *arglist)
 		return(JS_FALSE);
 
 	if(argc>1) {
-		JSVALUE_TO_ASTRING(cx, argv[1], p, 2, NULL);
+		JSVALUE_TO_ASTRING(cx, argv[1], p, 8, NULL);
  		if(p!=NULL)
 			prot=*p;
 		if(argc > 2)
diff --git a/src/sbbs3/js_console.cpp b/src/sbbs3/js_console.cpp
index 4ab17ca77b..b78c376f3e 100644
--- a/src/sbbs3/js_console.cpp
+++ b/src/sbbs3/js_console.cpp
@@ -667,7 +667,7 @@ js_handle_ctrlkey(JSContext *cx, uintN argc, jsval *arglist)
 	if(JSVAL_IS_INT(argv[0]))
 		key=(char)JSVAL_TO_INT(argv[0]);
 	else {
-		JSVALUE_TO_ASTRING(cx, argv[0], keystr, 2, NULL);
+		JSVALUE_TO_ASTRING(cx, argv[0], keystr, 8, NULL);
 		if(keystr==NULL)
 			return(JS_FALSE);
 		key=keystr[0];
-- 
GitLab