Fix usages of strncpy(), pj_ansi_strncpy(), and strncat() by replacing them with pj_ansi_safe_strncpy() and pj_ansi_safe_strcpycat()

This commit is contained in:
bennylp 2023-02-18 12:51:49 +07:00
parent 2315043b20
commit 5fe4bc1972
38 changed files with 151 additions and 128 deletions

View File

@ -1169,8 +1169,8 @@ static pj_bool_t handle_up_down(cli_telnet_sess *sess, pj_bool_t is_up)
/* Send data */
pj_strcat(&send_data, history);
telnet_sess_send(sess, &send_data);
pj_ansi_strncpy((char*)&sess->rcmd->rbuf, history->ptr, history->slen);
sess->rcmd->rbuf[history->slen] = 0;
pj_ansi_safe_strncpy((char*)&sess->rcmd->rbuf, history->ptr,
history->slen);
sess->rcmd->len = (unsigned)history->slen;
sess->rcmd->cur_pos = sess->rcmd->len;
return PJ_TRUE;

View File

@ -840,6 +840,60 @@ PJ_INLINE(void*) pj_memchr(const void *buf, int c, pj_size_t size)
return (void*)memchr((void*)buf, c, size);
}
/**
* Copy at most n bytes (including the null char) from source to destination.
* In any case, the destination string will be null terminated.
*
* @param dst The destination string.
* @param src The source string.
* @param n The size of the destination string.
*
* @return The destination string
*/
PJ_INLINE(char*) pj_ansi_safe_strncpy(char *dst, const char *src, pj_size_t n)
{
#ifdef __GNUC__
/* Silence these warnings:
* - __builtin_strncpy specified bound equals destination size
* - __builtin_strncpy output may be truncated copying x bytes from a string of length x
*/
# pragma GCC diagnostic push
# pragma GCC diagnostic ignored "-Wstringop-truncation"
#endif
pj_ansi_strncpy(dst, src, n-1);
#ifdef __GNUC__
# pragma GCC diagnostic pop
#endif
dst[n-1] = '\0';
return dst;
}
/**
* Copy src0 to destination string, and then concatenate src1 into destination
* string, limiting the total number of bytes written to the destination
* string to n including the null character. In any case, the destination
* string will be null terminated.
*
* @param dst The destination string.
* @param src The source string.
* @param n The size of the destination string.
*
* @return The destination string
*/
PJ_INLINE(char*) pj_ansi_safe_strcpycat(char *dst,
const char *src0,
const char *src1,
pj_size_t n)
{
pj_ansi_safe_strncpy(dst, src0, n);
if (src1) {
pj_size_t dst_len = pj_ansi_strlen(dst);
if (dst_len < n-1)
pj_ansi_safe_strncpy(dst+dst_len, src1, n-dst_len);
}
return dst;
}
/**
* @}
*/

View File

@ -220,9 +220,8 @@ PJ_DEF(pj_status_t) pj_getaddrinfo(int af, const pj_str_t *nodename,
/* Store canonical name (possibly truncating the name) */
if (res->ai_canonname) {
pj_ansi_strncpy(ai[i].ai_canonname, res->ai_canonname,
sizeof(ai[i].ai_canonname));
ai[i].ai_canonname[sizeof(ai[i].ai_canonname)-1] = '\0';
pj_ansi_safe_strncpy(ai[i].ai_canonname, res->ai_canonname,
sizeof(ai[i].ai_canonname));
} else {
pj_ansi_strcpy(ai[i].ai_canonname, nodecopy);
}
@ -303,9 +302,8 @@ PJ_DEF(pj_status_t) pj_getaddrinfo(int af, const pj_str_t *nodename,
pj_bzero(ai, max_count * sizeof(pj_addrinfo));
for (i=0; he.h_addr_list[i] && *count<max_count; ++i) {
pj_ansi_strncpy(ai[*count].ai_canonname, he.h_name,
sizeof(ai[*count].ai_canonname));
ai[*count].ai_canonname[sizeof(ai[*count].ai_canonname)-1] = '\0';
pj_ansi_safe_strncpy(ai[*count].ai_canonname, he.h_name,
sizeof(ai[*count].ai_canonname));
ai[*count].ai_addr.ipv4.sin_family = PJ_AF_INET;
pj_memcpy(&ai[*count].ai_addr.ipv4.sin_addr,

View File

@ -306,7 +306,7 @@ static pj_status_t if_enum_by_af(int af, unsigned *p_cnt, pj_sockaddr ifs[])
struct sockaddr *ad;
int rc;
strncpy(ifreq.ifr_name, if_list[i].if_name, IFNAMSIZ);
pj_ansi_safe_strncpy(ifreq.ifr_name, if_list[i].if_name, IFNAMSIZ);
TRACE_((THIS_FILE, " checking interface %s", ifreq.ifr_name));

View File

@ -725,8 +725,7 @@ PJ_DEF(pj_status_t) pj_thread_create( pj_pool_t *pool,
if (strchr(thread_name, '%')) {
pj_ansi_snprintf(rec->obj_name, PJ_MAX_OBJ_NAME, thread_name, rec);
} else {
strncpy(rec->obj_name, thread_name, PJ_MAX_OBJ_NAME);
rec->obj_name[PJ_MAX_OBJ_NAME-1] = '\0';
pj_ansi_safe_strncpy(rec->obj_name, thread_name, PJ_MAX_OBJ_NAME);
}
/* Set default stack size */
@ -1352,8 +1351,7 @@ static pj_status_t init_mutex(pj_mutex_t *mutex, const char *name, int type)
if (strchr(name, '%')) {
pj_ansi_snprintf(mutex->obj_name, PJ_MAX_OBJ_NAME, name, mutex);
} else {
strncpy(mutex->obj_name, name, PJ_MAX_OBJ_NAME);
mutex->obj_name[PJ_MAX_OBJ_NAME-1] = '\0';
pj_ansi_safe_strncpy(mutex->obj_name, name, PJ_MAX_OBJ_NAME);
}
PJ_LOG(6, (mutex->obj_name, "Mutex created"));
@ -1771,8 +1769,7 @@ PJ_DEF(pj_status_t) pj_sem_create( pj_pool_t *pool,
if (strchr(name, '%')) {
pj_ansi_snprintf(sem->obj_name, PJ_MAX_OBJ_NAME, name, sem);
} else {
strncpy(sem->obj_name, name, PJ_MAX_OBJ_NAME);
sem->obj_name[PJ_MAX_OBJ_NAME-1] = '\0';
pj_ansi_safe_strncpy(sem->obj_name, name, PJ_MAX_OBJ_NAME);
}
PJ_LOG(6, (sem->obj_name, "Semaphore created"));

View File

@ -581,8 +581,7 @@ PJ_DEF(pj_status_t) pj_thread_create( pj_pool_t *pool,
if (strchr(thread_name, '%')) {
pj_ansi_snprintf(rec->obj_name, PJ_MAX_OBJ_NAME, thread_name, rec);
} else {
pj_ansi_strncpy(rec->obj_name, thread_name, PJ_MAX_OBJ_NAME);
rec->obj_name[PJ_MAX_OBJ_NAME-1] = '\0';
pj_ansi_safe_strncpy(rec->obj_name, thread_name, PJ_MAX_OBJ_NAME);
}
PJ_LOG(6, (rec->obj_name, "Thread created"));
@ -1015,8 +1014,7 @@ static pj_status_t init_mutex(pj_mutex_t *mutex, const char *name)
if (strchr(name, '%')) {
pj_ansi_snprintf(mutex->obj_name, PJ_MAX_OBJ_NAME, name, mutex);
} else {
pj_ansi_strncpy(mutex->obj_name, name, PJ_MAX_OBJ_NAME);
mutex->obj_name[PJ_MAX_OBJ_NAME-1] = '\0';
pj_ansi_safe_strncpy(mutex->obj_name, name, PJ_MAX_OBJ_NAME);
}
PJ_LOG(6, (mutex->obj_name, "Mutex created"));
@ -1266,8 +1264,7 @@ PJ_DEF(pj_status_t) pj_sem_create( pj_pool_t *pool,
if (strchr(name, '%')) {
pj_ansi_snprintf(sem->obj_name, PJ_MAX_OBJ_NAME, name, sem);
} else {
pj_ansi_strncpy(sem->obj_name, name, PJ_MAX_OBJ_NAME);
sem->obj_name[PJ_MAX_OBJ_NAME-1] = '\0';
pj_ansi_safe_strncpy(sem->obj_name, name, PJ_MAX_OBJ_NAME);
}
LOG_MUTEX((sem->obj_name, "Semaphore created"));
@ -1407,8 +1404,7 @@ PJ_DEF(pj_status_t) pj_event_create( pj_pool_t *pool,
if (strchr(name, '%')) {
pj_ansi_snprintf(event->obj_name, PJ_MAX_OBJ_NAME, name, event);
} else {
pj_ansi_strncpy(event->obj_name, name, PJ_MAX_OBJ_NAME);
event->obj_name[PJ_MAX_OBJ_NAME-1] = '\0';
pj_ansi_safe_strncpy(event->obj_name, name, PJ_MAX_OBJ_NAME);
}
PJ_LOG(6, (event->obj_name, "Event created"));

View File

@ -166,8 +166,7 @@ PJ_DEF(void) pj_pool_init_int( pj_pool_t *pool,
pj_ansi_snprintf(pool->obj_name, sizeof(pool->obj_name),
name, pool);
} else {
pj_ansi_strncpy(pool->obj_name, name, PJ_MAX_OBJ_NAME);
pool->obj_name[PJ_MAX_OBJ_NAME-1] = '\0';
pj_ansi_safe_strncpy(pool->obj_name, name, PJ_MAX_OBJ_NAME);
}
} else {
pool->obj_name[0] = '\0';

View File

@ -72,8 +72,7 @@ PJ_DEF(pj_pool_t*) pj_pool_create_imp( const char *file, int line,
return NULL;
if (name) {
pj_ansi_strncpy(pool->obj_name, name, sizeof(pool->obj_name));
pool->obj_name[sizeof(pool->obj_name)-1] = '\0';
pj_ansi_safe_strncpy(pool->obj_name, name, sizeof(pool->obj_name));
} else {
strcpy(pool->obj_name, "altpool");
}

View File

@ -179,7 +179,7 @@ static pj_str_t tls_strerror(pj_status_t status,
#if defined(PJ_HAS_ERROR_STRING) && (PJ_HAS_ERROR_STRING != 0)
if (tmp) {
pj_ansi_strncpy(buf, tmp, bufsize);
pj_ansi_safe_strncpy(buf, tmp, bufsize);
errstr = pj_str(buf);
return errstr;
}

View File

@ -191,7 +191,7 @@ static void update_certs_info(pj_ssl_sock_t* ssock,
# ifdef _MSC_VER
# define strerror_r(err,buf,len) strerror_s(buf,len,err)
# else
# define strerror_r(err,buf,len) pj_ansi_strncpy(buf,strerror(err),len)
# define strerror_r(err,buf,len) pj_ansi_safe_strncpy(buf,strerror(err),len)
# endif
#endif
@ -441,7 +441,7 @@ static pj_str_t ssl_strerror(pj_status_t status,
const char *tmp = NULL;
tmp = ERR_reason_error_string(ssl_err);
if (tmp) {
pj_ansi_strncpy(buf, tmp, bufsize);
pj_ansi_safe_strncpy(buf, tmp, bufsize);
errstr = pj_str(buf);
return errstr;
}

View File

@ -258,7 +258,7 @@ static pj_status_t add_dev (struct alsa_factory *af, const char *dev_name)
pj_bzero(adi, sizeof(*adi));
/* Set device name */
strncpy(adi->name, dev_name, sizeof(adi->name));
pj_ansi_safe_strncpy(adi->name, dev_name, sizeof(adi->name));
/* Check the number of playback channels */
adi->output_count = (pb_result>=0) ? 1 : 0;
@ -311,17 +311,15 @@ static void get_mixer_name(struct alsa_factory *af)
{
if (snd_mixer_selem_has_playback_volume(elem))
{
pj_ansi_strncpy(af->pb_mixer_name, elemname,
sizeof(af->pb_mixer_name));
af->pb_mixer_name[sizeof(af->pb_mixer_name)-1] = 0;
pj_ansi_safe_strncpy(af->pb_mixer_name, elemname,
sizeof(af->pb_mixer_name));
TRACE_((THIS_FILE, "Playback mixer name: %s",
af->pb_mixer_name));
}
if (snd_mixer_selem_has_capture_volume(elem))
{
pj_ansi_strncpy(af->cap_mixer_name, elemname,
sizeof(af->cap_mixer_name));
af->cap_mixer_name[sizeof(af->cap_mixer_name)-1] = 0;
pj_ansi_safe_strncpy(af->cap_mixer_name, elemname,
sizeof(af->cap_mixer_name));
TRACE_((THIS_FILE, "Capture mixer name: %s",
af->cap_mixer_name));
}

View File

@ -174,8 +174,7 @@ static pj_status_t factory_get_dev_info(pjmedia_aud_dev_factory *f,
return PJMEDIA_EAUD_INVDEV;
pj_bzero(info, sizeof(*info));
pj_ansi_strncpy(info->name, si->name, sizeof(info->name));
info->name[sizeof(info->name)-1] = '\0';
pj_ansi_safe_strncpy(info->name, si->name, sizeof(info->name));
info->input_count = si->input_count;
info->output_count = si->output_count;
info->default_samples_per_sec = si->default_samples_per_sec;

View File

@ -415,7 +415,7 @@ static pj_status_t oboe_refresh(pjmedia_aud_dev_factory *ff)
/* Get name info */
jstring jstrtmp = (jstring)jni_env->GetObjectField(jdev_info, jobjs.dev_info.f_name);
const char *strtmp = jni_env->GetStringUTFChars(jstrtmp, NULL);
pj_ansi_strncpy(base_adi->name, strtmp, sizeof(base_adi->name));
pj_ansi_safe_strncpy(base_adi->name, strtmp, sizeof(base_adi->name));
f->dev_count++;

View File

@ -519,13 +519,11 @@ static pj_status_t pa_get_dev_info(pjmedia_aud_dev_factory *f,
return PJMEDIA_EAUD_INVDEV;
pj_bzero(info, sizeof(*info));
strncpy(info->name, pa_info->name, sizeof(info->name));
info->name[sizeof(info->name)-1] = '\0';
pj_ansi_safe_strncpy(info->name, pa_info->name, sizeof(info->name));
info->input_count = pa_info->maxInputChannels;
info->output_count = pa_info->maxOutputChannels;
info->default_samples_per_sec = (unsigned)pa_info->defaultSampleRate;
strncpy(info->driver, DRIVER_NAME, sizeof(info->driver));
info->driver[sizeof(info->driver)-1] = '\0';
pj_ansi_safe_strncpy(info->driver, DRIVER_NAME, sizeof(info->driver));
info->caps = PJMEDIA_AUD_DEV_CAP_INPUT_LATENCY |
PJMEDIA_AUD_DEV_CAP_OUTPUT_LATENCY;

View File

@ -330,16 +330,15 @@ static void build_dev_info(UINT deviceId, struct wmme_dev_info *wdi,
/* Device Name */
if (deviceId==WAVE_MAPPER) {
strncpy(wdi->info.name, "Wave mapper", sizeof(wdi->info.name));
wdi->info.name[sizeof(wdi->info.name)-1] = '\0';
pj_ansi_safe_strncpy(wdi->info.name, "Wave mapper",
sizeof(wdi->info.name));
} else {
const pj_char_t *szPname = WIC_WOC(wic, woc, szPname);
PJ_DECL_ANSI_TEMP_BUF(wTmp, sizeof(wdi->info.name));
strncpy(wdi->info.name,
pj_ansi_safe_strncpy(wdi->info.name,
PJ_NATIVE_TO_STRING(szPname, wTmp, PJ_ARRAY_SIZE(wTmp)),
sizeof(wdi->info.name));
wdi->info.name[sizeof(wdi->info.name)-1] = '\0';
}
wdi->info.default_samples_per_sec = 16000;

View File

@ -540,12 +540,12 @@ static pj_status_t and_factory_refresh(pjmedia_vid_dev_factory *ff)
PJMEDIA_VID_DEV_CAP_ORIENTATION;
/* Set driver & name info */
pj_ansi_strncpy(vdi->driver, "Android", sizeof(vdi->driver));
pj_ansi_safe_strncpy(vdi->driver, "Android", sizeof(vdi->driver));
adi->facing = facing;
if (facing == 0) {
pj_ansi_strncpy(vdi->name, "Back camera", sizeof(vdi->name));
pj_ansi_safe_strncpy(vdi->name, "Back camera", sizeof(vdi->name));
} else {
pj_ansi_strncpy(vdi->name, "Front camera", sizeof(vdi->name));
pj_ansi_safe_strncpy(vdi->name, "Front camera", sizeof(vdi->name));
}
/* Get supported sizes */

View File

@ -281,8 +281,9 @@ static void reset_dev_info(struct avi_dev_info *adi)
pj_bzero(adi, sizeof(*adi));
/* Fill up with *dummy" device info */
pj_ansi_strncpy(adi->info.name, "AVI Player", sizeof(adi->info.name)-1);
pj_ansi_strncpy(adi->info.driver, DRIVER_NAME, sizeof(adi->info.driver)-1);
pj_ansi_safe_strncpy(adi->info.name, "AVI Player", sizeof(adi->info.name));
pj_ansi_safe_strncpy(adi->info.driver, DRIVER_NAME,
sizeof(adi->info.driver));
adi->info.dir = PJMEDIA_DIR_CAPTURE;
adi->info.has_callback = PJ_FALSE;
}
@ -484,8 +485,10 @@ PJ_DEF(pj_status_t) pjmedia_avi_dev_alloc( pjmedia_vid_dev_factory *f,
}
/* Init device info */
pj_ansi_strncpy(adi->info.name, adi->title.ptr, sizeof(adi->info.name)-1);
pj_ansi_strncpy(adi->info.driver, DRIVER_NAME, sizeof(adi->info.driver)-1);
pj_ansi_safe_strncpy(adi->info.name, adi->title.ptr,
sizeof(adi->info.name));
pj_ansi_safe_strncpy(adi->info.driver, DRIVER_NAME,
sizeof(adi->info.driver));
adi->info.dir = PJMEDIA_DIR_CAPTURE;
adi->info.has_callback = PJ_FALSE;

View File

@ -201,11 +201,10 @@ static pj_status_t cbar_factory_init(pjmedia_vid_dev_factory *f)
/* Passive capturer */
ddi = &cf->dev_info[0];
pj_bzero(ddi, sizeof(*ddi));
pj_ansi_strncpy(ddi->info.name, "Colorbar generator",
sizeof(ddi->info.name));
ddi->info.driver[sizeof(ddi->info.driver)-1] = '\0';
pj_ansi_strncpy(ddi->info.driver, "Colorbar", sizeof(ddi->info.driver));
ddi->info.driver[sizeof(ddi->info.driver)-1] = '\0';
pj_ansi_safe_strncpy(ddi->info.name, "Colorbar generator",
sizeof(ddi->info.name));
pj_ansi_safe_strncpy(ddi->info.driver, "Colorbar",
sizeof(ddi->info.driver));
ddi->info.dir = PJMEDIA_DIR_CAPTURE;
ddi->info.has_callback = PJ_FALSE;
@ -221,11 +220,10 @@ static pj_status_t cbar_factory_init(pjmedia_vid_dev_factory *f)
/* Active capturer */
ddi = &cf->dev_info[1];
pj_bzero(ddi, sizeof(*ddi));
pj_ansi_strncpy(ddi->info.name, "Colorbar-active",
sizeof(ddi->info.name));
ddi->info.driver[sizeof(ddi->info.driver)-1] = '\0';
pj_ansi_strncpy(ddi->info.driver, "Colorbar", sizeof(ddi->info.driver));
ddi->info.driver[sizeof(ddi->info.driver)-1] = '\0';
pj_ansi_safe_strncpy(ddi->info.name, "Colorbar-active",
sizeof(ddi->info.name));
pj_ansi_safe_strncpy(ddi->info.driver, "Colorbar",
sizeof(ddi->info.driver));
ddi->info.dir = PJMEDIA_DIR_CAPTURE;
ddi->info.has_callback = PJ_TRUE;

View File

@ -304,8 +304,8 @@ static pj_status_t darwin_factory_refresh(pjmedia_vid_dev_factory *f)
/* Init output device */
qdi = &qf->dev_info[qf->dev_count++];
pj_bzero(qdi, sizeof(*qdi));
pj_ansi_strncpy(qdi->info.name, "UIView", sizeof(qdi->info.name));
pj_ansi_strncpy(qdi->info.driver, "iOS", sizeof(qdi->info.driver));
pj_ansi_safe_strncpy(qdi->info.name, "UIView", sizeof(qdi->info.name));
pj_ansi_safe_strncpy(qdi->info.driver, "iOS", sizeof(qdi->info.driver));
qdi->info.dir = PJMEDIA_DIR_RENDER;
qdi->info.has_callback = PJ_FALSE;
#endif
@ -363,9 +363,11 @@ static pj_status_t darwin_factory_refresh(pjmedia_vid_dev_factory *f)
qdi = &qf->dev_info[qf->dev_count++];
pj_bzero(qdi, sizeof(*qdi));
pj_ansi_strncpy(qdi->info.name, [device.localizedName UTF8String],
sizeof(qdi->info.name));
pj_ansi_strncpy(qdi->info.driver, "AVF", sizeof(qdi->info.driver));
pj_ansi_safe_strncpy(qdi->info.name,
[device.localizedName UTF8String],
sizeof(qdi->info.name));
pj_ansi_safe_strncpy(qdi->info.driver, "AVF",
sizeof(qdi->info.driver));
qdi->info.dir = PJMEDIA_DIR_CAPTURE;
qdi->info.has_callback = PJ_FALSE;
#if TARGET_OS_IPHONE

View File

@ -476,9 +476,8 @@ static pj_status_t dshow_factory_refresh(pjmedia_vid_dev_factory *f)
CoTaskMemFree(wszDisplayName);
}
strncpy(ddi->info.driver, "dshow",
sizeof(ddi->info.driver));
ddi->info.driver[sizeof(ddi->info.driver)-1] = '\0';
pj_ansi_safe_strncpy(ddi->info.driver, "dshow",
sizeof(ddi->info.driver));
ddi->info.dir = PJMEDIA_DIR_CAPTURE;
ddi->info.has_callback = PJ_TRUE;
@ -506,10 +505,10 @@ static pj_status_t dshow_factory_refresh(pjmedia_vid_dev_factory *f)
#if HAS_VMR
ddi = &df->dev_info[df->dev_count++];
pj_bzero(ddi, sizeof(*ddi));
pj_ansi_strncpy(ddi->info.name, "Video Mixing Renderer",
sizeof(ddi->info.name));
ddi->info.name[sizeof(ddi->info.name)-1] = '\0';
pj_ansi_strncpy(ddi->info.driver, "dshow", sizeof(ddi->info.driver));
pj_ansi_safe_strncpy(ddi->info.name, "Video Mixing Renderer",
sizeof(ddi->info.name));
pj_ansi_safe_strncpy(ddi->info.driver, "dshow",
sizeof(ddi->info.driver));
ddi->info.driver[sizeof(ddi->info.driver)-1] = '\0';
ddi->info.dir = PJMEDIA_DIR_RENDER;
ddi->info.has_callback = PJ_FALSE;

View File

@ -467,8 +467,8 @@ static pj_status_t ffmpeg_factory_refresh(pjmedia_vid_dev_factory *f)
info = &ff->dev_info[ff->dev_count++];
pj_bzero(info, sizeof(*info));
pj_ansi_strncpy(info->base.name, "default",
sizeof(info->base.name));
pj_ansi_safe_strncpy(info->base.name, "default",
sizeof(info->base.name));
pj_ansi_snprintf(info->base.driver, sizeof(info->base.driver),
"ffmpeg %s", p->name);

View File

@ -493,22 +493,22 @@ static pj_status_t sdl_factory_init(pjmedia_vid_dev_factory *f)
ddi = &sf->dev_info[0];
pj_bzero(ddi, sizeof(*ddi));
strncpy(ddi->info.name, "SDL renderer", sizeof(ddi->info.name));
ddi->info.name[sizeof(ddi->info.name)-1] = '\0';
pj_ansi_safe_strncpy(ddi->info.name, "SDL renderer",
sizeof(ddi->info.name));
ddi->info.fmt_cnt = PJ_ARRAY_SIZE(sdl_fmts);
#if PJMEDIA_VIDEO_DEV_SDL_HAS_OPENGL
ddi = &sf->dev_info[OPENGL_DEV_IDX];
pj_bzero(ddi, sizeof(*ddi));
strncpy(ddi->info.name, "SDL openGL renderer", sizeof(ddi->info.name));
ddi->info.name[sizeof(ddi->info.name)-1] = '\0';
pj_ansi_safe_strncpy(ddi->info.name, "SDL openGL renderer",
sizeof(ddi->info.name));
ddi->info.fmt_cnt = 1;
#endif /* PJMEDIA_VIDEO_DEV_SDL_HAS_OPENGL */
for (i = 0; i < sf->dev_count; i++) {
ddi = &sf->dev_info[i];
strncpy(ddi->info.driver, "SDL", sizeof(ddi->info.driver));
ddi->info.driver[sizeof(ddi->info.driver)-1] = '\0';
pj_ansi_safe_strncpy(ddi->info.driver, "SDL",
sizeof(ddi->info.driver));
ddi->info.dir = PJMEDIA_DIR_RENDER;
ddi->info.has_callback = PJ_FALSE;
ddi->info.caps = PJMEDIA_VID_DEV_CAP_FORMAT |

View File

@ -353,13 +353,11 @@ static pj_status_t v4l2_scan_devs(vid4lin_factory *f)
continue;
}
strncpy(pdi->dev_name, dev_name, sizeof(pdi->dev_name));
pdi->dev_name[sizeof(pdi->dev_name)-1] = '\0';
strncpy(pdi->info.name, (char*)pdi->v4l2_cap.card,
sizeof(pdi->info.name));
pdi->info.name[sizeof(pdi->info.name)-1] = '\0';
strncpy(pdi->info.driver, DRIVER_NAME, sizeof(pdi->info.driver));
pdi->info.driver[sizeof(pdi->info.driver)-1] = '\0';
pj_ansi_safe_strncpy(pdi->dev_name, dev_name, sizeof(pdi->dev_name));
pj_ansi_safe_strncpy(pdi->info.name, (char*)pdi->v4l2_cap.card,
sizeof(pdi->info.name));
pj_ansi_safe_strncpy(pdi->info.driver, DRIVER_NAME,
sizeof(pdi->info.driver));
pdi->info.dir = PJMEDIA_DIR_CAPTURE;
pdi->info.has_callback = PJ_FALSE;
pdi->info.caps = PJMEDIA_VID_DEV_CAP_FORMAT;
@ -618,8 +616,7 @@ static pj_status_t vid4lin_factory_create_stream(pjmedia_vid_dev_factory *f,
pj_memcpy(&stream->param, param, sizeof(*param));
stream->pool = pool;
pj_memcpy(&stream->vid_cb, cb, sizeof(*cb));
strncpy(stream->name, vdi->info.name, sizeof(stream->name));
stream->name[sizeof(stream->name)-1] = '\0';
pj_ansi_safe_strncpy(stream->name, vdi->info.name, sizeof(stream->name));
stream->user_data = user_data;
stream->fd = INVALID_FD;

View File

@ -135,8 +135,7 @@ PJ_DEF(pj_status_t) pjmedia_aud_driver_init(unsigned drv_idx,
if (drv->name[0]=='\0') {
/* Set driver name */
pj_ansi_strncpy(drv->name, info.driver, sizeof(drv->name));
drv->name[sizeof(drv->name)-1] = '\0';
pj_ansi_safe_strncpy(drv->name, info.driver, sizeof(drv->name));
}
if (drv->play_dev_idx < 0 && info.output_count) {

View File

@ -106,7 +106,7 @@ PJ_DEF(pj_status_t) pjmedia_delay_buf_create( pj_pool_t *pool,
b = PJ_POOL_ZALLOC_T(pool, pjmedia_delay_buf);
pj_ansi_strncpy(b->obj_name, name, PJ_MAX_OBJ_NAME-1);
pj_ansi_safe_strncpy(b->obj_name, name, PJ_MAX_OBJ_NAME);
b->samples_per_frame = samples_per_frame;
b->channel_count = channel_count;

View File

@ -59,8 +59,7 @@ PJ_DEF(const pjmedia_snd_dev_info*) pjmedia_snd_get_dev_info(unsigned index)
return NULL;
pj_bzero(oi, sizeof(*oi));
pj_ansi_strncpy(oi->name, di.name, sizeof(oi->name));
oi->name[sizeof(oi->name)-1] = '\0';
pj_ansi_safe_strncpy(oi->name, di.name, sizeof(oi->name));
oi->input_count = di.input_count;
oi->output_count = di.output_count;
oi->default_samples_per_sec = di.default_samples_per_sec;

View File

@ -100,7 +100,7 @@ PJ_DEF(pj_status_t) pjmedia_stream_info_parse_fmtp( pj_pool_t *pool,
if (end > start) {
if (pool) {
token = (char*)pj_pool_alloc(pool, end - start);
pj_ansi_strncpy(token, start, end - start);
pj_ansi_safe_strncpy(token, start, end - start);
} else {
token = start;
}

View File

@ -125,8 +125,8 @@ PJ_DEF(pj_status_t) pjmedia_tp_adapter_create( pjmedia_endpt *endpt,
pool = pjmedia_endpt_create_pool(endpt, name, 512, 512);
adapter = PJ_POOL_ZALLOC_T(pool, struct tp_adapter);
adapter->pool = pool;
pj_ansi_strncpy(adapter->base.name, pool->obj_name,
sizeof(adapter->base.name));
pj_ansi_safe_strncpy(adapter->base.name, pool->obj_name,
sizeof(adapter->base.name));
adapter->base.type = (pjmedia_transport_type)
(PJMEDIA_TRANSPORT_TYPE_USER + 1);
adapter->base.op = &tp_adapter_op;

View File

@ -255,7 +255,7 @@ static pj_status_t dtls_create(transport_srtp *srtp,
ds = PJ_POOL_ZALLOC_T(pool, dtls_srtp);
ds->pool = pool;
pj_ansi_strncpy(ds->base.name, pool->obj_name, PJ_MAX_OBJ_NAME);
pj_ansi_safe_strncpy(ds->base.name, pool->obj_name, PJ_MAX_OBJ_NAME);
ds->base.type = (pjmedia_transport_type)PJMEDIA_SRTP_KEYING_DTLS_SRTP;
ds->base.op = &dtls_op;
ds->base.user_data = srtp;

View File

@ -79,7 +79,7 @@ static pj_status_t sdes_create(transport_srtp *srtp,
pjmedia_transport *sdes;
sdes = PJ_POOL_ZALLOC_T(srtp->pool, pjmedia_transport);
pj_ansi_strncpy(sdes->name, srtp->pool->obj_name, PJ_MAX_OBJ_NAME);
pj_ansi_safe_strncpy(sdes->name, srtp->pool->obj_name, PJ_MAX_OBJ_NAME);
pj_memcpy(sdes->name, "sdes", 4);
sdes->type = (pjmedia_transport_type)PJMEDIA_SRTP_KEYING_SDES;
sdes->op = &sdes_op;

View File

@ -252,8 +252,7 @@ PJ_DEF(pj_status_t) pjmedia_vid_driver_init(unsigned drv_idx,
if (drv->name[0]=='\0') {
/* Set driver name */
pj_ansi_strncpy(drv->name, info.driver, sizeof(drv->name));
drv->name[sizeof(drv->name)-1] = '\0';
pj_ansi_safe_strncpy(drv->name, info.driver, sizeof(drv->name));
}
if (drv->rend_dev_idx < 0 && (info.dir & PJMEDIA_DIR_RENDER)) {

View File

@ -2774,8 +2774,7 @@ static pj_status_t cmd_restart_handler(pj_cli_cmd_val *cval)
ac = MAX_ARGC - argc;
get_options(&cval->argv[i], &ac, argvst);
for (j = 0; j < ac; j++) {
pj_ansi_strncpy(pbuf, argvst[j].ptr, argvst[j].slen);
pbuf[argvst[j].slen] = '\0';
pj_ansi_safe_strncpy(pbuf, argvst[j].ptr, argvst[j].slen);
argv[argc + j] = pbuf;
pbuf += argvst[j].slen + 1;
}

View File

@ -90,8 +90,7 @@ static gui_menu root_menu = {
#if defined(PJ_DARWINOS) && PJ_DARWINOS!=0
PJ_INLINE(char *) add_path(const char *path, const char *fname)
{
strncpy(fpath, path, PATH_LENGTH);
strncat(fpath, fname, PATH_LENGTH);
pj_ansi_safe_strcpycat(fpath, path, fname, PATH_LENGTH);
return fpath;
}
#else
@ -133,10 +132,7 @@ static void systest_perror(const char *title, pj_status_t status)
else
errmsg[0] = '\0';
strcpy(themsg, title);
strncat(themsg, errmsg, sizeof(themsg)-1);
themsg[sizeof(themsg)-1] = '\0';
pj_ansi_safe_strcpycat(themsg, title, errmsg, sizeof(themsg));
gui_msgbox("Error", themsg, WITH_OK);
}
@ -639,8 +635,7 @@ static void systest_audio_test(void)
}
ti->success = PJ_TRUE;
pj_ansi_strncpy(ti->reason, textbuf, sizeof(ti->reason));
ti->reason[sizeof(ti->reason)-1] = '\0';
pj_ansi_safe_strncpy(ti->reason, textbuf, sizeof(ti->reason));
}
@ -915,8 +910,7 @@ on_return:
key = gui_msgbox(title, msg, WITH_OK);
ti->success = PJ_TRUE;
pj_ansi_strncpy(ti->reason, msg, sizeof(ti->reason));
ti->reason[sizeof(ti->reason)-1] = '\0';
pj_ansi_safe_strncpy(ti->reason, msg, sizeof(ti->reason));
}
}
@ -1055,8 +1049,7 @@ on_return:
pj_ansi_snprintf(msg, sizeof(msg), "Test succeeded.\r\n");
ti->success = PJ_TRUE;
pj_ansi_strncpy(ti->reason, msg, sizeof(ti->reason));
ti->reason[sizeof(ti->reason)-1] = '\0';
pj_ansi_safe_strncpy(ti->reason, msg, sizeof(ti->reason));
}
}
@ -1201,8 +1194,7 @@ static void systest_display_settings(void)
len = strlen(textbuf);
ti->success = PJ_TRUE;
pj_ansi_strncpy(ti->reason, textbuf, sizeof(ti->reason));
ti->reason[sizeof(ti->reason)-1] = '\0';
pj_ansi_safe_strncpy(ti->reason, textbuf, sizeof(ti->reason));
key = gui_msgbox(title, textbuf, WITH_OK);
PJ_UNUSED_ARG(key); /* Warning about unused var */
}

View File

@ -3863,8 +3863,7 @@ static PyObject *py_pj_parse_simple_sip(PyObject *pSelf, PyObject *pArgs)
return NULL;
}
strncpy(tmp, arg_uri, sizeof(tmp));
tmp[sizeof(tmp)-1] = '\0';
pj_ansi_safe_strncpy(tmp, arg_uri, sizeof(tmp));
pool = pjsua_pool_create("py_pj_parse_simple_sip", 512, 512);
uri = pjsip_parse_uri(pool, tmp, strlen(tmp), 0);

View File

@ -41,7 +41,7 @@ const char* find_gcc(const char *gcc_exe)
return NULL;
}
strncpy(spath, p, sizeof(spath));
pj_ansi_safe_strncpy(spath, p, sizeof(spath));
p = strtok(spath, ";");
while (p) {
int len;

View File

@ -292,7 +292,7 @@ void MainWin::call()
char uri[256];
pjsua_call_setting call_setting;
pj_ansi_strncpy(uri, dst.toUtf8().data(), sizeof(uri));
pj_ansi_safe_strncpy(uri, dst.toUtf8().data(), sizeof(uri));
pj_str_t uri2 = pj_str((char*)uri);
pj_assert(currentCall_ == -1);

View File

@ -347,7 +347,7 @@ static void timer_cb(pj_timer_heap_t *timer_heap, struct pj_timer_entry *entry)
(inv->timer->refresher == TR_UAS && inv->timer->role == PJSIP_ROLE_UAS);
entry_id = entry->id;
pj_ansi_strncpy(obj_name, inv->pool->obj_name, PJ_MAX_OBJ_NAME);
pj_ansi_safe_strncpy(obj_name, inv->pool->obj_name, PJ_MAX_OBJ_NAME);
/* Do action based on role(refresher or refreshee).
* As refresher:

View File

@ -968,7 +968,7 @@ PJ_DEF(pj_status_t) pjsua_call_dump( pjsua_call_id call_id,
len = (int)pj_ansi_strlen(tmp);
if (len + 3 > (int)maxlen) len = maxlen - 3;
pj_ansi_strncpy(buffer, tmp, len);
pj_ansi_safe_strncpy(buffer, tmp, len);
p += len;
*p++ = '\r';