3434#endif
3535
3636#define DRIVER_NAME "NUT ADELSYSTEM DC-UPS CB/CBI driver (libmodbus link type: " NUT_MODBUS_LINKTYPE_STR ")"
37- #define DRIVER_VERSION "0.06 "
37+ #define DRIVER_VERSION "0.07 "
3838
3939/* variables */
4040static modbus_t * mbctx = NULL ; /* modbus memory context */
@@ -951,18 +951,20 @@ int get_dev_state(devreg_t regindx, devstate_t **dvstat)
951951 case LVDC : /* "output.voltage" */
952952 case LCUR : /* "output.current" */
953953 if (reg_val != 0 ) {
954- char * fval_s ;
955954 double fval ;
955+ char * fval_s ;
956+ size_t fval_sz ;
956957
957958 state -> reg .val .ui16 = reg_val ;
958959 fval = reg_val / 1000.00 ; /* convert mV to V, mA to A */
959960 n = snprintf (NULL , 0 , "%.2f" , fval );
960961 if (ptr != NULL ) {
961962 free (ptr );
962963 }
963- fval_s = (char * )xmalloc (sizeof (char ) * (n + 1 ));
964+ fval_sz = sizeof (char ) * (n + 1 );
965+ fval_s = (char * )xmalloc (fval_sz );
964966 ptr = fval_s ;
965- sprintf (fval_s , "%.2f" , fval );
967+ snprintf (fval_s , fval_sz , "%.2f" , fval );
966968 state -> reg .strval = fval_s ;
967969 } else {
968970 state -> reg .val .ui16 = 0 ;
@@ -976,15 +978,17 @@ int get_dev_state(devreg_t regindx, devstate_t **dvstat)
976978 case VAC : /* "input.voltage" */
977979 if (reg_val != 0 ) {
978980 char * reg_val_s ;
981+ size_t reg_val_sz ;
979982
980983 state -> reg .val .ui16 = reg_val ;
981984 n = snprintf (NULL , 0 , "%u" , reg_val );
982985 if (ptr != NULL ) {
983986 free (ptr );
984987 }
985- reg_val_s = (char * )xmalloc (sizeof (char ) * (n + 1 ));
988+ reg_val_sz = sizeof (char ) * (n + 1 );
989+ reg_val_s = (char * )xmalloc (reg_val_sz );
986990 ptr = reg_val_s ;
987- sprintf (reg_val_s , "%u" , reg_val );
991+ snprintf (reg_val_s , reg_val_sz , "%u" , reg_val );
988992 state -> reg .strval = reg_val_s ;
989993 } else {
990994 state -> reg .val .ui16 = 0 ;
@@ -996,16 +1000,18 @@ int get_dev_state(devreg_t regindx, devstate_t **dvstat)
9961000 if (reg_val != 0 ) {
9971001 double fval ;
9981002 char * fval_s ;
1003+ size_t fval_sz ;
9991004
10001005 state -> reg .val .ui16 = reg_val ;
10011006 fval = (double )reg_val * regs [BSOC ].scale ;
10021007 n = snprintf (NULL , 0 , "%.2f" , fval );
10031008 if (ptr != NULL ) {
10041009 free (ptr );
10051010 }
1006- fval_s = (char * )xmalloc (sizeof (char ) * (n + 1 ));
1011+ fval_sz = sizeof (char ) * (n + 1 );
1012+ fval_s = (char * )xmalloc (fval_sz );
10071013 ptr = fval_s ;
1008- sprintf (fval_s , "%.2f" , fval );
1014+ snprintf (fval_s , fval_sz , "%.2f" , fval );
10091015 state -> reg .strval = fval_s ;
10101016 } else {
10111017 state -> reg .val .ui16 = 0 ;
@@ -1018,16 +1024,18 @@ int get_dev_state(devreg_t regindx, devstate_t **dvstat)
10181024 { /* scoping */
10191025 double fval ;
10201026 char * fval_s ;
1027+ size_t fval_sz ;
10211028
10221029 state -> reg .val .ui16 = reg_val ;
10231030 fval = reg_val - 273.15 ;
10241031 n = snprintf (NULL , 0 , "%.2f" , fval );
1025- fval_s = (char * )xmalloc (sizeof (char ) * (n + 1 ));
1032+ fval_sz = sizeof (char ) * (n + 1 );
1033+ fval_s = (char * )xmalloc (fval_sz );
10261034 if (ptr != NULL ) {
10271035 free (ptr );
10281036 }
10291037 ptr = fval_s ;
1030- sprintf (fval_s , "%.2f" , fval );
1038+ snprintf (fval_s , fval_sz , "%.2f" , fval );
10311039 state -> reg .strval = fval_s ;
10321040 }
10331041 upsdebugx (3 , "get_dev_state: variable: %s" , state -> reg .strval );
@@ -1221,14 +1229,17 @@ int get_dev_state(devreg_t regindx, devstate_t **dvstat)
12211229 default :
12221230 { /* scoping */
12231231 char * reg_val_s ;
1232+ size_t reg_val_sz ;
1233+
12241234 state -> reg .val .ui16 = reg_val ;
12251235 n = snprintf (NULL , 0 , "%u" , reg_val );
12261236 if (ptr != NULL ) {
12271237 free (ptr );
12281238 }
1229- reg_val_s = (char * )xmalloc (sizeof (char ) * (n + 1 ));
1239+ reg_val_sz = sizeof (char ) * (n + 1 );
1240+ reg_val_s = (char * )xmalloc (reg_val_sz );
12301241 ptr = reg_val_s ;
1231- sprintf (reg_val_s , "%u" , reg_val );
1242+ snprintf (reg_val_s , reg_val_sz , "%u" , reg_val );
12321243 state -> reg .strval = reg_val_s ;
12331244 }
12341245 break ;
@@ -1326,7 +1337,7 @@ modbus_t *modbus_new(const char *port)
13261337 }
13271338 } else if ((sp = strchr (port , ':' )) != NULL ) {
13281339 char * tcp_port = xmalloc (sizeof (sp ));
1329- strcpy (tcp_port , sp + 1 );
1340+ strncpy (tcp_port , sp + 1 , sizeof ( sp ) );
13301341 * sp = '\0' ;
13311342 mb = modbus_new_tcp (port , (int )strtoul (tcp_port , NULL , 10 ));
13321343 if (mb == NULL ) {
0 commit comments