Fix conversion of SWATCH flags to string form
This was broken in commit [07cdd587], where 'sizeof' was used on a pointer
instead of the buffer pointed-to.
Fix this by having the caller of ircop_flags_to_str() supply a buffer and
length, since there's only two callers and both can use happily use stack
objects.
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
[Changes 1.2.2]
|
||||
|
||||
* Fix display of the OperView SWATCH flags variable. (caf)
|
||||
|
||||
* Update default /fset SERVER_NOTICE value to remove extra space. (caf)
|
||||
|
||||
* Treat all NOTICEs before registration as local server notices. (caf)
|
||||
|
||||
@@ -1004,38 +1004,36 @@ int i, j;
|
||||
return flag;
|
||||
}
|
||||
|
||||
char *ircop_flags_to_str(long flag)
|
||||
char *ircop_flags_to_str(long flag, char *buffer, size_t len)
|
||||
{
|
||||
int i, p;
|
||||
char *buffer = new_malloc(IRCD_BUFFER_SIZE);
|
||||
int i;
|
||||
|
||||
for (i = 0, p = 1; opflags[i]; i++, p <<= 1)
|
||||
buffer[0] = 0;
|
||||
for (i = 0; opflags[i]; i++)
|
||||
{
|
||||
if (flag & p)
|
||||
if (flag & (1L << i))
|
||||
{
|
||||
strlcat(buffer, opflags[i], sizeof buffer);
|
||||
strlcat(buffer, ",", sizeof buffer);
|
||||
strlcat(buffer, opflags[i], len);
|
||||
strlcat(buffer, ",", len);
|
||||
}
|
||||
}
|
||||
if (*buffer)
|
||||
chop(buffer, 1);
|
||||
return buffer;
|
||||
return chop(buffer, 1);
|
||||
}
|
||||
|
||||
void print_ircop_flags(int server)
|
||||
{
|
||||
long flag;
|
||||
char *buffer = NULL;
|
||||
flag = get_server_ircop_flags(server);
|
||||
buffer = ircop_flags_to_str(flag);
|
||||
char buffer[200];
|
||||
long flag = get_server_ircop_flags(server);
|
||||
|
||||
ircop_flags_to_str(flag, buffer, sizeof buffer);
|
||||
put_it("%s", convert_output_format("$G %bOper%BView%n: $0-", "%s", *buffer ? flag == -1 ? "ALL" : buffer : "NONE"));
|
||||
new_free(&buffer);
|
||||
}
|
||||
|
||||
void convert_swatch(Window *win, char *str, int unused)
|
||||
{
|
||||
unsigned long flag;
|
||||
char *p;
|
||||
unsigned long flag;
|
||||
char buffer[200];
|
||||
|
||||
if (from_server != -1)
|
||||
{
|
||||
flag = ircop_str_to_flags(get_server_ircop_flags(from_server), str);
|
||||
@@ -1044,9 +1042,8 @@ char *p;
|
||||
else
|
||||
flag = ircop_str_to_flags(default_swatch, str);
|
||||
default_swatch = flag;
|
||||
p = ircop_flags_to_str(flag);
|
||||
set_string_var(SWATCH_VAR, p);
|
||||
new_free(&p);
|
||||
ircop_flags_to_str(flag, buffer, sizeof buffer);
|
||||
set_string_var(SWATCH_VAR, buffer);
|
||||
}
|
||||
|
||||
void set_operview_flags(int server, unsigned long flags, int neg)
|
||||
|
||||
Reference in New Issue
Block a user