diff --git a/CHANGES.TXT b/CHANGES.TXT index 2275195..89f64c7 100644 --- a/CHANGES.TXT +++ b/CHANGES.TXT @@ -15,10 +15,19 @@ Key: (name) - the name of the person running HydraIRC who first reported the problem or requested the feature +4/18/2026 - AM (0.3.169.1) - Experimental + gdwnldsKSC + * Resolved IRC protocol issue from github issue https://github/HydraIRC/hydrairc/issues/17 + 4/10/2026 - AM (0.3.169) - Experimental gdwnldsKSC * Updated DEVELPER.TXT with instructions for building under Visual Studio 2013 * XP SP2 minimum target - Pending IPv6 support will need this, as do WTL9.1 and other aspects. + +24/August/2023 - AM (0.3.168) + gdwnldsKSC + * Updated libXML2 from 2.5.1 to current libXML2 master as of 22/October/2022 + * Upgraded WTL8 to WTL9.1 23/September/2022 - AM (0.3.167) - Experimental gdwnldsKSC diff --git a/HydraIRC/HydraIRC.rc b/HydraIRC/HydraIRC.rc index 250b580..4d6ca5f 100644 --- a/HydraIRC/HydraIRC.rc +++ b/HydraIRC/HydraIRC.rc @@ -90,8 +90,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 0,3,169,0 - PRODUCTVERSION 0,3,169,0 + FILEVERSION 0,3,169,1 + PRODUCTVERSION 0,3,169,1 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -109,12 +109,12 @@ BEGIN VALUE "Comments", "http://www.HydraIRC.com" VALUE "CompanyName", "Hydra Productions" VALUE "FileDescription", "HydraIRC" - VALUE "FileVersion", "0.3.169.0" + VALUE "FileVersion", "0.3.169.1" VALUE "InternalName", "HydraIRC" VALUE "LegalCopyright", "Dominic Clifton - Copyright 2002-2026" VALUE "OriginalFilename", "HydraIRC.exe" VALUE "ProductName", "HydraIRC" - VALUE "ProductVersion", "0.3.169.0" + VALUE "ProductVersion", "0.3.169.1" END END BLOCK "VarFileInfo" diff --git a/HydraIRC/Server.cpp b/HydraIRC/Server.cpp index 4cd26c5..e9602bf 100644 --- a/HydraIRC/Server.cpp +++ b/HydraIRC/Server.cpp @@ -1,29 +1,20 @@ /* HydraIRC - Copyright (C) 2002-2006 Dominic Clifton aka Hydra - - HydraIRC limited-use source license - - 1) You can: - 1.1) Use the source to create improvements and bug-fixes to send to the - author to be incorporated in the main program. - 1.2) Use it for review/educational purposes. - - 2) You can NOT: - 2.1) Use the source to create derivative works. (That is, you can't release - your own version of HydraIRC with your changes in it) - 2.2) Compile your own version and sell it. - 2.3) Distribute unmodified, modified source or compiled versions of HydraIRC - without first obtaining permission from the author. (I want one place - for people to come to get HydraIRC from) - 2.4) Use any of the code or other part of HydraIRC in anything other than - HydraIRC. - - 3) All code submitted to the project: - 3.1) Must not be covered by any license that conflicts with this license - (e.g. GPL code) - 3.2) Will become the property of the author. + Copyright (C) 2002-2026 Dominic Clifton aka Hydra + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ @@ -1985,6 +1976,9 @@ void IRCServer::Parse( char *processstr ) { username = a; topictime = b; + if (topictime[0] == ':') { + topictime++; + } time_t l = (time_t)atol(topictime); // FIXME - no check for null string t = localtime(&l); } @@ -2023,23 +2017,32 @@ void IRCServer::Parse( char *processstr ) { char *channelname; channelname = strtok(rest, " "); - //username = UseEmptyString(strtok(NULL, " ")); - - time_t l = (time_t)atol(UseEmptyString(strtok(NULL, ""))); // FIXME - no check for null string + char *timeStr = UseEmptyString(strtok(NULL, "")); + if (!timeStr) { + sys_Printf(BIC_ERROR, "ERROR: Failed to parse creation time for channel %s\n", channelname); + break; + } + // ircd protocol fix for servers not putting space after + if (timeStr[0] == ':') { + timeStr++; + } + + time_t l = (time_t)atol(timeStr); tm *t = localtime(&l); m_Variables[VID_CHANNEL] = channelname; m_Variables[VID_PARAM1] = channelname; - m_Variables[VID_PARAM2] = t ? stripcrlf(asctime(t)) : "unknown"; + m_Variables[VID_PARAM2] = t ? stripcrlf(asctime(t)) : "unknown"; - IRCChannel *pChannel = FindChannel(channelname); - if (pChannel) - { - pChannel->OutputFormatter(BIC_TOPIC,num); - } - else - sys_Printf(BIC_ERROR,"ERROR: Received channel information for a channel that we've not joined (%s)\n",channelname); - } + IRCChannel *pChannel = FindChannel(channelname); + + if (pChannel) + { + pChannel->OutputFormatter(BIC_TOPIC, num); + } + else + sys_Printf(BIC_ERROR, "ERROR: Received channel information for a channel that we've not joined (%s)\n", channelname); + } break; case RPL_NAMREPLY: @@ -2117,6 +2120,10 @@ void IRCServer::Parse( char *processstr ) channelname = strtok(rest, " "); channelmode = UseEmptyString(strtok(NULL,"")); + if (channelmode && channelmode[0] == ':') { + channelmode++; + } + m_Variables[VID_CHANNEL] = channelname; m_Variables[VID_CHANNELMODE] = channelmode; m_Variables[VID_PARAM1] = channelname; @@ -2687,6 +2694,12 @@ void IRCServer::Parse( char *processstr ) m_Variables[VID_PARAM1] = to; m_Variables[VID_PARAM2] = tmpnick; m_Variables[VID_PARAM3] = UseEmptyString(rest); + + char *colonPos = strchr(rest, ':'); + if (colonPos) { + memmove(colonPos, colonPos + 1, strlen(colonPos)); + } + if (ischannelstartchar(to[0])) { IRCChannel *pChannel = FindChannel(to); diff --git a/HydraIRC/version.h b/HydraIRC/version.h index b7ed615..e43e318 100644 --- a/HydraIRC/version.h +++ b/HydraIRC/version.h @@ -27,8 +27,8 @@ */ -#define VERSIONNUM "v0.3.168" -#define VERSIONDATE "(13/November/2022)" +#define VERSIONNUM "v0.3.169.1" +#define VERSIONDATE "(18/April/2026)" #ifdef RELEASE_VERSION #define VERSIONSTRING_EXTRA_1 ""