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]
|
[Changes 1.2.2]
|
||||||
|
|
||||||
|
* Fix display of the OperView SWATCH flags variable. (caf)
|
||||||
|
|
||||||
* Update default /fset SERVER_NOTICE value to remove extra space. (caf)
|
* Update default /fset SERVER_NOTICE value to remove extra space. (caf)
|
||||||
|
|
||||||
* Treat all NOTICEs before registration as local server notices. (caf)
|
* Treat all NOTICEs before registration as local server notices. (caf)
|
||||||
|
|||||||
@@ -1004,38 +1004,36 @@ int i, j;
|
|||||||
return flag;
|
return flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *ircop_flags_to_str(long flag)
|
char *ircop_flags_to_str(long flag, char *buffer, size_t len)
|
||||||
{
|
{
|
||||||
int i, p;
|
int i;
|
||||||
char *buffer = new_malloc(IRCD_BUFFER_SIZE);
|
|
||||||
|
|
||||||
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, opflags[i], len);
|
||||||
strlcat(buffer, ",", sizeof buffer);
|
strlcat(buffer, ",", len);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (*buffer)
|
return chop(buffer, 1);
|
||||||
chop(buffer, 1);
|
|
||||||
return buffer;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void print_ircop_flags(int server)
|
void print_ircop_flags(int server)
|
||||||
{
|
{
|
||||||
long flag;
|
char buffer[200];
|
||||||
char *buffer = NULL;
|
long flag = get_server_ircop_flags(server);
|
||||||
flag = get_server_ircop_flags(server);
|
|
||||||
buffer = ircop_flags_to_str(flag);
|
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"));
|
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)
|
void convert_swatch(Window *win, char *str, int unused)
|
||||||
{
|
{
|
||||||
unsigned long flag;
|
unsigned long flag;
|
||||||
char *p;
|
char buffer[200];
|
||||||
|
|
||||||
if (from_server != -1)
|
if (from_server != -1)
|
||||||
{
|
{
|
||||||
flag = ircop_str_to_flags(get_server_ircop_flags(from_server), str);
|
flag = ircop_str_to_flags(get_server_ircop_flags(from_server), str);
|
||||||
@@ -1044,9 +1042,8 @@ char *p;
|
|||||||
else
|
else
|
||||||
flag = ircop_str_to_flags(default_swatch, str);
|
flag = ircop_str_to_flags(default_swatch, str);
|
||||||
default_swatch = flag;
|
default_swatch = flag;
|
||||||
p = ircop_flags_to_str(flag);
|
ircop_flags_to_str(flag, buffer, sizeof buffer);
|
||||||
set_string_var(SWATCH_VAR, p);
|
set_string_var(SWATCH_VAR, buffer);
|
||||||
new_free(&p);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_operview_flags(int server, unsigned long flags, int neg)
|
void set_operview_flags(int server, unsigned long flags, int neg)
|
||||||
|
|||||||
Reference in New Issue
Block a user