The previous fix (5e6e3be3) left a possibility to use-after-delete,
though it has been much harder to accidentally trigger.
If AddChan(pChan) fails, it deletes pChan, so the new crash was
happening during showing of error message.
Test for this is at master branch: 9777a1a667
Thanks to https://scan.coverity.com/ for pointing at this.
This reverts commits 27d78795a7 and
f27109f1b4. It was decided that the
functionality is provided by a separate module instead, to avoid
unnecessarily bloating the core.
Let add users via the list of users in the similar manner it’s
done for networks. It’s evidently an extra step to add a user,
but on the other hand it gives a nice overview of the users
when adding new ones, and leads to less clutter in the sidebar.
The CChan constructor makes sure that the channel name begins with a valid
channel prefix. Thus, this could change the name of the resulting channel.
When you edited an irc network which already had a channel "#foo", were
connected to IRC (so ZNC knows which prefixes are valid) and added a channel
"foo", this would lead to a problem:
Webadmin checks and sees that there is no channel "foo" yet. Webadmin creates a
new CChan instance for "foo". The CChan constructor notices that "f" is not a
valid channel prefix and instead calls itself "#foo". Then,
CIRCNetwork::AddChan() would see that this channel already exists, delete the
given channel and return false.
However, webadmin didn't check this result and would continue changing settings
on an already destroyed CChan instance.
Fix this by checking if the channel exists after CChan had its chance to mess
with the channel name. Also handle failures from CIRCNetwork::AddChan().
Fixes#528.
Signed-off-by: Uli Schlachter <psychon@znc.in>
Although most browsers seem to accept relative redirects, it is not
allowed by HTTP/1.1.
This commit changes relative URIs to absolute ones when redirecting.