FreeCalypso > hg > freecalypso-tools
view loadtools/lacrc32.c @ 965:2969032bdfac
fcup-smsend[mult]: fix buglet in K&R C NULL pointer passing
The only 100% safe way to pass a NULL pointer as a function argument
in K&R C is to cast 0 to a pointer type; failing to do so may cause
mysterious bugs (invalid stack frames or garbage in argument registers)
on 64-bit machines. This issue has already been fixed in most of
FC host tools, but I just found some missed spots: passing of NULL UDH
to PDU encoding functions in fcup-smsend[mult] in the case of single
(not concatenated) SMS.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 01 Sep 2023 07:33:51 +0000 |
parents | 5385aca4d813 |
children |
line wrap: on
line source
/* * This module implements the function for getting a CRC-32 computation * from loadagent. */ #include <sys/types.h> #include <stdio.h> #include <stdint.h> #include <string.h> #include <strings.h> #include <stdlib.h> extern char target_response_line[]; crc32_on_target(area_base, area_len, retptr) u_long area_base, area_len, *retptr; { char arg1[10], arg2[10], *argv[4]; int stat; char *strtoul_endp; sprintf(arg1, "%lx", area_base); sprintf(arg2, "%lx", area_len); argv[0] = "crc32"; argv[1] = arg1; argv[2] = arg2; argv[3] = 0; tpinterf_make_cmd(argv); if (tpinterf_send_cmd() < 0) return(-1); stat = tpinterf_capture_output_oneline(10); /* 10 s timeout */ if (stat != 1) { errout: fprintf(stderr, "error: malformed response to crc32 command\n"); return(-1); } if (strlen(target_response_line) != 8) goto errout; *retptr = strtoul(target_response_line, &strtoul_endp, 16); if (strtoul_endp != target_response_line + 8) goto errout; return(0); }