char *lock_info_str;
char *host_name;
char *user_name = user_login_name(NULL);
+ int sz, maxlen;
if (user_name == NULL)
user_name = "";
else
host_name = "";
- lock_info_str = (char *)alloca(strlen(user_name) + strlen(host_name)
- + LOCK_PID_MAX + 5);
+ maxlen = strlen(user_name) + strlen(host_name)
+ + LOCK_PID_MAX + 5;
+ lock_info_str = (char *)alloca(maxlen);
- sprintf(lock_info_str, "%s@%s.%lu", user_name, host_name,
- (unsigned long)getpid());
+ sz = snprintf(lock_info_str, maxlen, "%s@%s.%lu", user_name, host_name,
+ (unsigned long)getpid());
+ assert(sz>=0 && sz < maxlen);
err = symlink(lock_info_str, lfname);
if (err != 0 && errno == EEXIST && force) {
struct gcpro gcpro1, gcpro2, gcpro3;
Lisp_Object old_current_buffer;
Lisp_Object subject_buf;
+ int sz, max_sz;
if (inhibit_clash_detection)
return;
goto done;
/* Else consider breaking the lock */
- locker = (char *)alloca(strlen(lock_info.user) + strlen(lock_info.host)
- + LOCK_PID_MAX + 9);
- sprintf(locker, "%s@%s (pid %lu)", lock_info.user, lock_info.host,
- lock_info.pid);
+ max_sz = strlen(lock_info.user) + strlen(lock_info.host)
+ + LOCK_PID_MAX + 9;
+ locker = (char *)alloca(max_sz);
+ sz = snprintf(locker, max_sz, "%s@%s (pid %lu)",
+ lock_info.user, lock_info.host,
+ lock_info.pid);
+ assert(sz>=0 && sz < max_sz);
FREE_LOCK_INFO(lock_info);
attack = call2_in_buffer(BUFFERP(subject_buf) ? XBUFFER(subject_buf) :