42 size_t n = nbytes + 1;
46 for (u = 0; u < nbytes; u++) {
58 memcpy(
string, bytes, nbytes);
62 for (u = 0; u < nbytes; u++) {
63 if (bytes[u] ==
'\0') {
85 ret = ByteExtract(&i64, e,
len, bytes);
109 ret = ByteExtract(&i64, e,
len, bytes);
114 *res = (uint32_t)i64;
130 ret = ByteExtract(&i64, e,
len, bytes);
135 *res = (uint16_t)i64;
142 const char *ptr =
str;
167 *res = strtoull(ptr, &endptr, base);
169 if (errno == ERANGE) {
174 }
else if (endptr == ptr && *res == 0) {
177 }
else if (endptr == ptr) {
181 else if (strict && *endptr !=
'\0') {
182 SCLogError(
"Extra characters following numeric value");
186 return (
int)(endptr - ptr);
202 if (i64 > UINT32_MAX) {
206 *res = (uint32_t)i64;
208 if ((uint64_t)(*res) != i64) {
209 SCLogDebug(
"Numeric value out of range (%" PRIu64
" > %" PRIuMAX
")",
210 i64, (uintmax_t)UINT_MAX);
225 if (i64 > UINT16_MAX) {
229 *res = (uint16_t)i64;
231 if ((uint64_t)(*res) != i64) {
232 SCLogDebug(
"Numeric value out of range (%" PRIu64
" > %" PRIuMAX
")",
233 i64, (uintmax_t)USHRT_MAX);
248 if (i64 > UINT8_MAX) {
254 if ((uint64_t)(*res) != i64) {
255 SCLogDebug(
"Numeric value out of range (%" PRIu64
" > %" PRIuMAX
")",
256 i64, (uintmax_t)UCHAR_MAX);
276 if (i64 > UINT32_MAX) {
280 *res = (uint32_t)i64;
282 if ((uint64_t)(*res) != i64) {
284 "(%" PRIu64
" > %" PRIuMAX
")",
285 i64, (uintmax_t)UINT_MAX);
303 if (i64 > UINT16_MAX) {
307 *res = (uint16_t)i64;
309 if ((uint64_t)(*res) != i64) {
311 "(%" PRIu64
" > %" PRIuMAX
")",
312 i64, (uintmax_t)USHRT_MAX);
330 if (i64 > UINT8_MAX) {
336 if ((uint64_t)(*res) != i64) {
338 "(%" PRIu64
" > %" PRIuMAX
")",
339 i64, (uintmax_t)UCHAR_MAX);
347 uint64_t *res,
int base,
size_t len,
const char *
str, uint64_t min, uint64_t max)
358 if (*res < min || *res > max) {
366 uint32_t *res,
int base,
size_t len,
const char *
str, uint32_t min, uint32_t max)
374 if (u64 > UINT32_MAX) {
378 *res = (uint32_t)u64;
380 if (*res < min || *res > max) {
384 if ((uint64_t)(*res) != u64) {
386 "(%" PRIu64
" > %" PRIuMAX
")",
387 u64, (uintmax_t)UINT_MAX);
395 uint16_t *res,
int base,
size_t len,
const char *
str, uint16_t min, uint16_t max)
403 if (u64 > UINT16_MAX) {
407 *res = (uint16_t)u64;
409 if (*res < min || *res > max) {
413 if ((uint64_t)(*res) != u64) {
415 "(%" PRIu64
" > %" PRIuMAX
")",
416 u64, (uintmax_t)USHRT_MAX);
427 uint8_t *res,
int base,
size_t len,
const char *
str, uint8_t min, uint8_t max)
435 if (u64 > UINT8_MAX) {
441 if (*res < min || *res > max) {
445 if ((uint64_t)(*res) != u64) {
447 "(%" PRIu64
" > %" PRIuMAX
")",
448 u64, (uintmax_t)UCHAR_MAX);
457 const char *ptr =
str;
482 *res = strtoll(ptr, &endptr, base);
484 if (errno == ERANGE) {
487 }
else if (endptr ==
str) {
491 else if (strict &&
len && *endptr !=
'\0') {
492 SCLogError(
"Extra characters following numeric value");
498 return (
int)(endptr - ptr);
515 if (i64 < INT32_MIN || i64 > INT32_MAX) {
521 if ((int64_t)(*res) != i64) {
523 "(%" PRIi64
" > %" PRIiMAX
")\n",
524 i64, (intmax_t)INT_MAX);
540 if (i64 < INT16_MIN || i64 > INT16_MAX) {
546 if ((int64_t)(*res) != i64) {
548 "(%" PRIi64
" > %" PRIiMAX
")\n",
549 i64, (intmax_t)SHRT_MAX);
565 if (i64 < INT8_MIN || i64 > INT8_MAX) {
571 if ((int64_t)(*res) != i64) {
573 "(%" PRIi64
" > %" PRIiMAX
")\n",
574 i64, (intmax_t)CHAR_MAX);
595 if (i64 < INT32_MIN || i64 > INT32_MAX) {
601 if ((int64_t)(*res) != i64) {
603 "(%" PRIi64
" > %" PRIiMAX
")\n",
604 i64, (intmax_t)INT_MAX);
620 if (i64 < INT16_MIN || i64 > INT16_MAX) {
626 if ((int64_t)(*res) != i64) {
628 "(%" PRIi64
" > %" PRIiMAX
")\n",
629 i64, (intmax_t)SHRT_MAX);
645 if (i64 < INT8_MIN || i64 > INT8_MAX) {
651 if ((int64_t)(*res) != i64) {
653 "(%" PRIi64
" > %" PRIiMAX
")\n",
654 i64, (intmax_t)CHAR_MAX);
662 int64_t *res,
int base,
size_t len,
const char *
str, int64_t min, int64_t max)
673 if (*res < min || *res > max) {
681 int32_t *res,
int base,
size_t len,
const char *
str, int32_t min, int32_t max)
690 if (i64 < INT32_MIN || i64 > INT32_MAX) {
696 if (*res < min || *res > max) {
700 if ((int64_t)(*res) != i64) {
702 "(%" PRIi64
" > %" PRIiMAX
")\n",
703 i64, (intmax_t)INT_MAX);
711 int16_t *res,
int base,
size_t len,
const char *
str, int16_t min, int16_t max)
720 if (i64 < INT16_MIN || i64 > INT16_MAX) {
726 if (*res < min || *res > max) {
730 if ((int64_t)(*res) != i64) {
732 "(%" PRIi64
" > %" PRIiMAX
")\n",
733 i64, (intmax_t)SHRT_MAX);
741 int8_t *res,
int base,
size_t len,
const char *
str, int8_t min, int8_t max)
750 if (i64 < INT8_MIN || i64 > INT8_MAX) {
756 if (*res < min || *res > max) {
760 if ((int64_t)(*res) != i64) {
762 "(%" PRIi64
" > %" PRIiMAX
")\n",
763 i64, (intmax_t)CHAR_MAX);
770 int HexToRaw(
const uint8_t *in,
size_t ins, uint8_t *out,
size_t outs)
780 for (x = 0, i = 0; i < ins; i += 2, x++) {
781 char buf[3] = { 0, 0, 0 };
785 long value = strtol(buf, NULL, 16);
786 if (value >= 0 && value <= 255)
787 out[x] = (uint8_t)value;
789 SCLogError(
"hash byte out of range %ld", value);
800 static int ByteTest01 (
void)
802 uint16_t val = 0x0102;
803 uint16_t i16 = 0xbfbf;
804 uint8_t bytes[2] = { 0x02, 0x01 };
807 if ((ret == 2) && (i16 == val)) {
814 static int ByteTest02 (
void)
816 uint16_t val = 0x0102;
817 uint16_t i16 = 0xbfbf;
818 uint8_t bytes[2] = { 0x01, 0x02 };
821 if ((ret == 2) && (i16 == val)) {
828 static int ByteTest03 (
void)
830 uint32_t val = 0x01020304;
831 uint32_t i32 = 0xbfbfbfbf;
832 uint8_t bytes[4] = { 0x04, 0x03, 0x02, 0x01 };
835 if ((ret == 4) && (i32 == val)) {
842 static int ByteTest04 (
void)
844 uint32_t val = 0x01020304;
845 uint32_t i32 = 0xbfbfbfbf;
846 uint8_t bytes[4] = { 0x01, 0x02, 0x03, 0x04 };
849 if ((ret == 4) && (i32 == val)) {
856 static int ByteTest05 (
void)
858 uint64_t val = 0x0102030405060708ULL;
859 uint64_t i64 = 0xbfbfbfbfbfbfbfbfULL;
860 uint8_t bytes[8] = { 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01 };
863 if ((ret == 8) && (i64 == val)) {
870 static int ByteTest06 (
void)
872 uint64_t val = 0x0102030405060708ULL;
873 uint64_t i64 = 0xbfbfbfbfbfbfbfbfULL;
874 uint8_t bytes[8] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
877 if ((ret == 8) && (i64 == val)) {
884 static int ByteTest07 (
void)
886 const char str[] =
"1234567890";
887 uint64_t val = 1234567890;
888 uint64_t i64 = 0xbfbfbfbfbfbfbfbfULL;
891 if ((ret == 10) && (i64 == val)) {
898 static int ByteTest08 (
void)
900 const char str[] =
"1234567890";
901 uint32_t val = 1234567890;
902 uint32_t i32 = 0xbfbfbfbf;
905 if ((ret == 10) && (i32 == val)) {
912 static int ByteTest09 (
void)
914 const char str[] =
"12345";
915 uint16_t val = 12345;
916 uint16_t i16 = 0xbfbf;
919 if ((ret == 5) && (i16 == val)) {
926 static int ByteTest10 (
void)
928 const char str[] =
"123";
933 if ((ret == 3) && (i8 == val)) {
940 static int ByteTest11 (
void)
942 const char str[] =
"-1234567890";
943 int64_t val = -1234567890;
944 int64_t i64 = 0xbfbfbfbfbfbfbfbfULL;
947 if ((ret == 11) && (i64 == val)) {
954 static int ByteTest12 (
void)
956 const char str[] =
"-1234567890";
957 int32_t val = -1234567890;
958 int32_t i32 = 0xbfbfbfbf;
961 if ((ret == 11) && (i32 == val)) {
968 static int ByteTest13 (
void)
970 const char str[] =
"-12345";
971 int16_t val = -12345;
972 int16_t i16 = 0xbfbf;
975 if ((ret == 6) && (i16 == val)) {
982 static int ByteTest14 (
void)
984 const char str[] =
"-123";
989 if ((ret == 4) && (i8 == val)) {
997 static int ByteTest15 (
void)
999 const char str[] =
"4294967295";
1000 uint32_t val = 4294967295UL;
1001 uint32_t u32 = 0xffffffff;
1004 if ((ret == 10) && (u32 == val)) {
1012 static int ByteTest16 (
void)
1014 const char str[] =
"4294967296";