@@ -72,6 +72,14 @@ void sinsp_filter_check::set_inspector(sinsp* inspector)
72
72
m_inspector = inspector;
73
73
}
74
74
75
+ template <class T >
76
+ static inline T rawval_cast (uint8_t *rawval)
77
+ {
78
+ T val;
79
+ memcpy (&val, rawval, sizeof (T));
80
+ return val;
81
+ }
82
+
75
83
Json::Value sinsp_filter_check::rawval_to_json (uint8_t * rawval,
76
84
ppm_param_type ptype,
77
85
ppm_print_format print_format,
@@ -102,7 +110,7 @@ Json::Value sinsp_filter_check::rawval_to_json(uint8_t* rawval,
102
110
if (print_format == PF_DEC ||
103
111
print_format == PF_ID)
104
112
{
105
- return *( int16_t *) rawval;
113
+ return rawval_cast< int16_t >( rawval) ;
106
114
}
107
115
else if (print_format == PF_OCT ||
108
116
print_format == PF_HEX)
@@ -119,7 +127,7 @@ Json::Value sinsp_filter_check::rawval_to_json(uint8_t* rawval,
119
127
if (print_format == PF_DEC ||
120
128
print_format == PF_ID)
121
129
{
122
- return *( int32_t *) rawval;
130
+ return rawval_cast< int32_t >( rawval) ;
123
131
}
124
132
else if (print_format == PF_OCT ||
125
133
print_format == PF_HEX)
@@ -134,19 +142,19 @@ Json::Value sinsp_filter_check::rawval_to_json(uint8_t* rawval,
134
142
case PT_DOUBLE:
135
143
if (print_format == PF_DEC)
136
144
{
137
- return (Json::Value::Int64)(int64_t )*( double *) rawval;
145
+ return (Json::Value::Int64)(int64_t )rawval_cast< double >( rawval) ;
138
146
}
139
147
else
140
148
{
141
- return (Json::Value)*( double *) rawval;
149
+ return (Json::Value)rawval_cast< double >( rawval) ;
142
150
}
143
151
case PT_INT64:
144
152
case PT_PID:
145
153
case PT_FD:
146
154
if (print_format == PF_DEC ||
147
155
print_format == PF_ID)
148
156
{
149
- return (Json::Value::Int64)*( int64_t *) rawval;
157
+ return (Json::Value::Int64)rawval_cast< int64_t >( rawval) ;
150
158
}
151
159
else
152
160
{
@@ -212,7 +220,7 @@ Json::Value sinsp_filter_check::rawval_to_json(uint8_t* rawval,
212
220
if (print_format == PF_DEC ||
213
221
print_format == PF_ID)
214
222
{
215
- return (Json::Value::UInt64 )*( uint64_t *) rawval;
223
+ return (Json::Value::UInt64 )rawval_cast< uint64_t >( rawval) ;
216
224
}
217
225
else if (
218
226
print_format == PF_10_PADDED_DEC ||
@@ -233,7 +241,7 @@ Json::Value sinsp_filter_check::rawval_to_json(uint8_t* rawval,
233
241
return Json::nullValue;
234
242
235
243
case PT_BOOL:
236
- return Json::Value ((bool )(*( uint32_t *) rawval != 0 ));
244
+ return Json::Value ((bool )(rawval_cast< uint32_t >( rawval) != 0 ));
237
245
238
246
case PT_CHARBUF:
239
247
case PT_FSPATH:
@@ -309,7 +317,7 @@ char* sinsp_filter_check::rawval_to_string(uint8_t* rawval,
309
317
m_getpropertystr_storage.resize (STRPROPERTY_STORAGE_SIZE);
310
318
snprintf (m_getpropertystr_storage.data (),
311
319
STRPROPERTY_STORAGE_SIZE,
312
- prfmt, *( int16_t *) rawval);
320
+ prfmt, rawval_cast< int16_t >( rawval) );
313
321
return m_getpropertystr_storage.data ();
314
322
case PT_INT32:
315
323
if (print_format == PF_OCT)
@@ -334,7 +342,7 @@ char* sinsp_filter_check::rawval_to_string(uint8_t* rawval,
334
342
m_getpropertystr_storage.resize (STRPROPERTY_STORAGE_SIZE);
335
343
snprintf (m_getpropertystr_storage.data (),
336
344
STRPROPERTY_STORAGE_SIZE,
337
- prfmt, *( int32_t *) rawval);
345
+ prfmt, rawval_cast< int32_t >( rawval) );
338
346
return m_getpropertystr_storage.data ();
339
347
case PT_INT64:
340
348
case PT_PID:
@@ -365,7 +373,7 @@ char* sinsp_filter_check::rawval_to_string(uint8_t* rawval,
365
373
m_getpropertystr_storage.resize (STRPROPERTY_STORAGE_SIZE);
366
374
snprintf (m_getpropertystr_storage.data (),
367
375
STRPROPERTY_STORAGE_SIZE,
368
- prfmt, *( int64_t *) rawval);
376
+ prfmt, rawval_cast< int64_t >( rawval) );
369
377
return m_getpropertystr_storage.data ();
370
378
case PT_L4PROTO: // This can be resolved in the future
371
379
case PT_UINT8:
@@ -417,7 +425,7 @@ char* sinsp_filter_check::rawval_to_string(uint8_t* rawval,
417
425
m_getpropertystr_storage.resize (STRPROPERTY_STORAGE_SIZE);
418
426
snprintf (m_getpropertystr_storage.data (),
419
427
STRPROPERTY_STORAGE_SIZE,
420
- prfmt, *( uint16_t *) rawval);
428
+ prfmt, rawval_cast< uint16_t >( rawval) );
421
429
return m_getpropertystr_storage.data ();
422
430
case PT_UINT32:
423
431
if (print_format == PF_OCT)
@@ -442,7 +450,7 @@ char* sinsp_filter_check::rawval_to_string(uint8_t* rawval,
442
450
m_getpropertystr_storage.resize (STRPROPERTY_STORAGE_SIZE);
443
451
snprintf (m_getpropertystr_storage.data (),
444
452
STRPROPERTY_STORAGE_SIZE,
445
- prfmt, *( uint32_t *) rawval);
453
+ prfmt, rawval_cast< uint32_t >( rawval) );
446
454
return m_getpropertystr_storage.data ();
447
455
case PT_UINT64:
448
456
case PT_RELTIME:
@@ -473,7 +481,7 @@ char* sinsp_filter_check::rawval_to_string(uint8_t* rawval,
473
481
m_getpropertystr_storage.resize (STRPROPERTY_STORAGE_SIZE);
474
482
snprintf (m_getpropertystr_storage.data (),
475
483
STRPROPERTY_STORAGE_SIZE,
476
- prfmt, *( uint64_t *) rawval);
484
+ prfmt, rawval_cast< uint64_t >( rawval) );
477
485
return m_getpropertystr_storage.data ();
478
486
case PT_CHARBUF:
479
487
case PT_FSPATH:
@@ -494,7 +502,7 @@ char* sinsp_filter_check::rawval_to_string(uint8_t* rawval,
494
502
ASSERT (false );
495
503
return NULL ;
496
504
case PT_BOOL:
497
- if (*( uint32_t *) rawval != 0 )
505
+ if (rawval_cast< uint32_t >( rawval) != 0 )
498
506
{
499
507
return (char *)" true" ;
500
508
}
@@ -544,7 +552,7 @@ char* sinsp_filter_check::rawval_to_string(uint8_t* rawval,
544
552
m_getpropertystr_storage.resize (STRPROPERTY_STORAGE_SIZE);
545
553
snprintf (m_getpropertystr_storage.data (),
546
554
STRPROPERTY_STORAGE_SIZE,
547
- " %.1lf" , *( double *) rawval);
555
+ " %.1lf" , rawval_cast< double >( rawval) );
548
556
return m_getpropertystr_storage.data ();
549
557
case PT_IPNET:
550
558
m_getpropertystr_storage.resize (STRPROPERTY_STORAGE_SIZE);
0 commit comments