diff --git a/src/algorithms/libs/rtklib/rtklib_ionex.cc b/src/algorithms/libs/rtklib/rtklib_ionex.cc index 418782557..877044c9e 100644 --- a/src/algorithms/libs/rtklib/rtklib_ionex.cc +++ b/src/algorithms/libs/rtklib/rtklib_ionex.cc @@ -165,16 +165,17 @@ void readionexdcb(FILE *fp, double *dcb, double *rms) if (strstr(label, "PRN / BIAS / RMS") == label) { - strncpy(id, buff + 3, 3); - id[3] = '\0'; - - if (!(sat = satid2no(id))) + int ret = std::snprintf(id, 3, "%s", buff + 3); + if (ret >= 0 && ret < 3) { - trace(2, "ionex invalid satellite: %s\n", id); - continue; + if (!(sat = satid2no(id))) + { + trace(2, "ionex invalid satellite: %s\n", id); + continue; + } + dcb[sat - 1] = str2num(buff, 6, 10); + rms[sat - 1] = str2num(buff, 16, 10); } - dcb[sat - 1] = str2num(buff, 6, 10); - rms[sat - 1] = str2num(buff, 16, 10); } else if (strstr(label, "END OF AUX DATA") == label) { diff --git a/src/algorithms/libs/rtklib/rtklib_preceph.cc b/src/algorithms/libs/rtklib/rtklib_preceph.cc index 9c09dd392..224058d69 100644 --- a/src/algorithms/libs/rtklib/rtklib_preceph.cc +++ b/src/algorithms/libs/rtklib/rtklib_preceph.cc @@ -123,8 +123,11 @@ int readsp3h(FILE *fp, gtime_t *time, char *type, int *sats, } else if (i == 12) { - strncpy(tsys, buff + 9, 3); - tsys[3] = '\0'; + int ret = std::snprintf(tsys, 3, "%s", buff + 9); + if (ret < 0 || ret > 3) + { + trace(3, "Error reading sp3 header\n") + } } else if (i == 14) { diff --git a/src/algorithms/libs/rtklib/rtklib_rtkcmn.cc b/src/algorithms/libs/rtklib/rtklib_rtkcmn.cc index b4074abb8..8f4b68023 100644 --- a/src/algorithms/libs/rtklib/rtklib_rtkcmn.cc +++ b/src/algorithms/libs/rtklib/rtklib_rtkcmn.cc @@ -2847,11 +2847,13 @@ int readantex(const char *file, pcvs_t *pcvs) { strncpy(pcv.type, buff, 20); // MAXANT (64) pcv.type[20] = '\0'; - strncpy(pcv.code, buff + 20, 20); // MAXANT (64) - pcv.code[20] = '\0'; - if (!strncmp(pcv.code + 3, " ", 8)) + int ret = std::snprintf(pcv.code, 20, "%s", buff + 20); // MAXANT (64) + if (ret >= 0 && ret < 20) { - pcv.sat = satid2no(pcv.code); + if (!strncmp(pcv.code + 3, " ", 8)) + { + pcv.sat = satid2no(pcv.code); + } } } else if (strstr(buff + 60, "VALID FROM")) diff --git a/src/algorithms/libs/rtklib/rtklib_stream.cc b/src/algorithms/libs/rtklib/rtklib_stream.cc index 106598524..ec4b95c08 100644 --- a/src/algorithms/libs/rtklib/rtklib_stream.cc +++ b/src/algorithms/libs/rtklib/rtklib_stream.cc @@ -795,8 +795,11 @@ void decodetcppath(const char *path, char *addr, char *port, char *user, } if (addr) { - std::strncpy(addr, p, 256); - addr[255] = '\0'; + int ret = std::snprintf(addr, 256, "%s", p); + if (ret < 0 || ret >= 256) + { + tracet(1, "error reading address"); + } } } @@ -1077,8 +1080,7 @@ void updatetcpsvr(tcpsvr_t *tcpsvr, char *msg) { continue; } - std::strncpy(saddr, tcpsvr->cli[i].saddr, 256); - saddr[255] = '\0'; + std::snprintf(saddr, 256, "%s", tcpsvr->cli[i].saddr); n++; } if (n == 0) @@ -1968,8 +1970,7 @@ void *ftpthread(void *arg) } if (fs::exists(tmpfile)) { - std::strncpy(ftp->local, tmpfile.c_str(), 1024); - ftp->local[1023] = '\0'; + std::snprintf(ftp->local, 1024, "%s", tmpfile.c_str()); tracet(3, "ftpthread: file exists %s\n", ftp->local); ftp->state = 2; return nullptr;