diff --git a/CHANGELOG b/CHANGELOG index 813c862c1..d390d946d 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,37 @@ This is the changelog file for the POCO C++ Libraries. +Release 1.13.3 (2024-04-04) +=========================== + +Summary of Changes: + +This is a bugfix release. + +Security Fixes: + +- GH #4496 Upgrade bundled libexpat to 2.6.2 + +Features, Enhancements and Third Party Updates: + +- GH #4488 Add Poco::Util::Timer::idle() method to check if timer has any tasks scheduled +- GH #3807 DNS.resolve() should not be sorted in HostEntry::removeDuplicates() +- GH #4515 Upgrade bundled SQLite to 3.45.2 +- PR #4517 Optimize Net module for Android + +Bug Fixes and Improvements: + +- GH #4505 ODBC Unicode wrappers do not check for null length pointers +- GH #4492 Poco::BasicMemoryStreamBuf is missing seekpos() +- GH #4486 DateTimeFormat RFC1036 Sunday name is short (should be long) +- GH #4468 Poco::URI: don't lowercase host part if it's a Unix domain socket +- GH #4450 Error between Poco::ActiveRecord and Poco::Data::PostgreSQL +- GH #4435 SecureStreamSocket is not thread-safe +- GH #4415 SecureSocketImpl::reset shouldn't close socket +- GH #3857 Thread_POSIX.cpp shouldn't convert thread IDs to long +- GH #3725 secure socket receiveTimeout throwing after configured timeout * 2 + + Release 1.13.2 (2024-02-19) =========================== @@ -38,7 +69,7 @@ Features and Enhancements: Bug Fixes and Improvements: -- GH #4443 Upgrade libexpat to 2.6.0 +- GH #4443 Upgrade libexpat to 2.6.0 - GH #4425 Unit tests: optional testing of deprecated functionality - GH #4421 Multiple calls to initializeSSL/uninitializeSSL cause assert failure during certificate validation - GH #4411 NULL pointer: strategy when setting rotation never in FileChannel diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 3b226c004..bc0497c0f 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -65,3 +65,4 @@ Andrew Auclair Jochen Sprickerhof Jesse Hoogervorst Aron Budea +zhuzeitou diff --git a/CppParser/CppParser.progen b/CppParser/CppParser.progen index c45badd30..2cbd38aed 100644 --- a/CppParser/CppParser.progen +++ b/CppParser/CppParser.progen @@ -11,5 +11,6 @@ vc.project.compiler.include = ..\\Foundation\\include vc.project.compiler.defines.shared = ${vc.project.name}_EXPORTS vc.project.compiler.defines.debug_shared = ${vc.project.compiler.defines.shared} vc.project.compiler.defines.release_shared = ${vc.project.compiler.defines.shared} +vc.project.compiler.additionalOptions = /Zc:__cplusplus vc.solution.create = true vc.solution.include = testsuite\\TestSuite diff --git a/CppParser/include/Poco/CppParser/CppToken.h b/CppParser/include/Poco/CppParser/CppToken.h index 5338d4c8c..0d592d6a8 100644 --- a/CppParser/include/Poco/CppParser/CppToken.h +++ b/CppParser/include/Poco/CppParser/CppToken.h @@ -60,6 +60,7 @@ public: OP_GE, // >= OP_SHR, // >> OP_SHR_ASSIGN, // >>= + OP_SPACESHIP, // <=> OP_ASSIGN, // = OP_EQ, // == OP_NOT, // ! diff --git a/CppParser/include/Poco/CppParser/Symbol.h b/CppParser/include/Poco/CppParser/Symbol.h index 035eef647..8e9c77f9c 100644 --- a/CppParser/include/Poco/CppParser/Symbol.h +++ b/CppParser/include/Poco/CppParser/Symbol.h @@ -125,6 +125,14 @@ public: const std::string& getLibrary() const; /// Returns the symbol's library. + void setOrder(std::size_t order); + /// Sets the order of the symbol within its container. + /// + /// Currently only used for struct/class members. + + std::size_t getOrder() const; + /// Returns the order of the symbol within its container. + const Attributes& attrs() const; /// Returns the symbol's attributes. @@ -175,6 +183,7 @@ private: int _line; std::string _package; std::string _library; + std::size_t _order; Attributes _attrs; std::string _attributeList; @@ -245,6 +254,12 @@ inline const std::string& Symbol::getLibrary() const } +inline std::size_t Symbol::getOrder() const +{ + return _order; +} + + inline const Attributes& Symbol::attrs() const { return _attrs; diff --git a/CppParser/src/CppToken.cpp b/CppParser/src/CppToken.cpp index 7bb6c7b89..342da95e4 100644 --- a/CppParser/src/CppToken.cpp +++ b/CppParser/src/CppToken.cpp @@ -66,6 +66,7 @@ OperatorToken::OperatorToken() _opMap[">="] = i++; _opMap[">>"] = i++; _opMap[">>="] = i++; + _opMap["<=>"] = i++; _opMap["="] = i++; _opMap["=="] = i++; _opMap["!"] = i++; @@ -194,8 +195,14 @@ void OperatorToken::finish(std::istream& istr) { _value += (char) istr.get(); next = (char) istr.peek(); + if (next == '=') _value += (char) istr.get(); + } + else if (next == '=') + { + _value += (char) istr.get(); + next = (char) istr.peek(); + if (next == '>') _value += (char) istr.get(); } - if (next == '=') _value += (char) istr.get(); break; case '>': if (next == '>') diff --git a/CppParser/src/NameSpace.cpp b/CppParser/src/NameSpace.cpp index 65f62eb4b..08862a066 100644 --- a/CppParser/src/NameSpace.cpp +++ b/CppParser/src/NameSpace.cpp @@ -49,7 +49,8 @@ NameSpace::~NameSpace() void NameSpace::addSymbol(Symbol* pSymbol) { poco_check_ptr (pSymbol); - + + pSymbol->setOrder(_symbols.size()); _symbols.insert(SymbolTable::value_type(pSymbol->name(), pSymbol)); } @@ -65,7 +66,7 @@ void NameSpace::importSymbol(const std::string& fullName) } } - + void NameSpace::importNameSpace(const std::string& nameSpace) { _importedNameSpaces.push_back(nameSpace); @@ -94,7 +95,7 @@ Symbol* NameSpace::lookup(const std::string& name) const Symbol* NameSpace::lookup(const std::string& name, std::set& alreadyVisited) const { Symbol* pSymbol = 0; - + if (name.empty()) return pSymbol; @@ -104,11 +105,11 @@ Symbol* NameSpace::lookup(const std::string& name, std::set& a std::string head; std::string tail; splitName(name, head, tail); - + alreadyVisited.insert(this); bool currentNSInserted = true; - if (head.empty()) + if (head.empty()) { alreadyVisited.insert(this); return root()->lookup(tail, alreadyVisited); @@ -161,13 +162,13 @@ void NameSpace::nameSpaces(SymbolTable& table) const extract(Symbol::SYM_NAMESPACE, table); } - + void NameSpace::typeDefs(SymbolTable& table) const { extract(Symbol::SYM_TYPEDEF, table); } - + void NameSpace::typeAliases(SymbolTable& table) const { extract(Symbol::SYM_TYPEALIAS, table); @@ -179,19 +180,19 @@ void NameSpace::enums(SymbolTable& table) const extract(Symbol::SYM_ENUM, table); } - + void NameSpace::classes(SymbolTable& table) const { extract(Symbol::SYM_STRUCT, table); } - + void NameSpace::functions(SymbolTable& table) const { extract(Symbol::SYM_FUNCTION, table); } - + void NameSpace::variables(SymbolTable& table) const { extract(Symbol::SYM_VARIABLE, table); @@ -226,7 +227,7 @@ void NameSpace::splitName(const std::string& name, std::string& head, std::strin head.assign(name, 0, pos); pos += 2; poco_assert (pos < name.length()); - tail.assign(name, pos, name.length() - pos); + tail.assign(name, pos, name.length() - pos); } else head = name; } diff --git a/CppParser/src/Symbol.cpp b/CppParser/src/Symbol.cpp index 50c436b14..d6280e260 100644 --- a/CppParser/src/Symbol.cpp +++ b/CppParser/src/Symbol.cpp @@ -31,7 +31,8 @@ Symbol::Symbol(): _id(_nextId++), _pNameSpace(0), _access(ACC_PUBLIC), - _line(-1) + _line(-1), + _order(0) { } @@ -41,7 +42,8 @@ Symbol::Symbol(const std::string& name, NameSpace* pNameSpace): _name(name), _pNameSpace(pNameSpace), _access(ACC_PUBLIC), - _line(-1) + _line(-1), + _order(0) { if (_pNameSpace) _pNameSpace->addSymbol(this); @@ -103,6 +105,12 @@ void Symbol::setLibrary(const std::string& library) } +void Symbol::setOrder(std::size_t order) +{ + _order = order; +} + + std::string Symbol::fullName() const { std::string fullName; diff --git a/CppParser/testsuite/TestSuite.progen b/CppParser/testsuite/TestSuite.progen index 67d728c5d..b98b54a01 100644 --- a/CppParser/testsuite/TestSuite.progen +++ b/CppParser/testsuite/TestSuite.progen @@ -7,4 +7,5 @@ vc.project.platforms = Win32 vc.project.configurations = debug_shared, release_shared, debug_static_mt, release_static_mt, debug_static_md, release_static_md vc.project.prototype = TestSuite_vs90.vcproj vc.project.compiler.include = ..\\..\\Foundation\\include +vc.project.compiler.additionalOptions = /Zc:__cplusplus vc.project.linker.dependencies = iphlpapi.lib diff --git a/CppParser/testsuite/src/CppParserTest.cpp b/CppParser/testsuite/src/CppParserTest.cpp index c63f4c60a..7b07b0ffb 100644 --- a/CppParser/testsuite/src/CppParserTest.cpp +++ b/CppParser/testsuite/src/CppParserTest.cpp @@ -77,7 +77,7 @@ void CppParserTest::testExtractName() decl = "void func(int arg1, int arg2)"; name = Symbol::extractName(decl); assertTrue (name == "func"); - + decl = "std::function func"; name = Symbol::extractName(decl); assertTrue (name == "func"); diff --git a/CppUnit/CppUnit.progen b/CppUnit/CppUnit.progen index fe4a5976c..33490e445 100644 --- a/CppUnit/CppUnit.progen +++ b/CppUnit/CppUnit.progen @@ -12,5 +12,6 @@ vc.project.compiler.defines = POCO_NO_AUTOMATIC_LIBS vc.project.compiler.defines.shared = ${vc.project.name}_EXPORTS vc.project.compiler.defines.debug_shared = ${vc.project.compiler.defines.shared} vc.project.compiler.defines.release_shared = ${vc.project.compiler.defines.shared} +vc.project.compiler.additionalOptions = /Zc:__cplusplus vc.solution.create = true vc.solution.include = diff --git a/DLLVersion.rc b/DLLVersion.rc index 132e03b6d..b7cc2925d 100644 --- a/DLLVersion.rc +++ b/DLLVersion.rc @@ -4,8 +4,8 @@ #include "winres.h" -#define POCO_VERSION 1,13,1,0 -#define POCO_VERSION_STR "1.13.1" +#define POCO_VERSION 1,13,3,0 +#define POCO_VERSION_STR "1.13.3" VS_VERSION_INFO VERSIONINFO FILEVERSION POCO_VERSION @@ -28,7 +28,6 @@ BEGIN VALUE "FileDescription", "This file is part of the POCO C++ Libraries." VALUE "FileVersion", POCO_VERSION_STR VALUE "InternalName", "POCO" - VALUE "LegalCopyright", "Copyright (C) 2004-2024, Applied Informatics Software Engineering GmbH and Contributors." VALUE "ProductName", "POCO C++ Libraries - https://pocoproject.org" VALUE "ProductVersion", POCO_VERSION_STR END diff --git a/Encodings/Compiler/Compiler.progen b/Encodings/Compiler/Compiler.progen index 724d3e9c4..e3fa8996a 100644 --- a/Encodings/Compiler/Compiler.progen +++ b/Encodings/Compiler/Compiler.progen @@ -12,5 +12,6 @@ vc.project.compiler.defines = vc.project.compiler.defines.shared = vc.project.compiler.defines.debug_shared = ${vc.project.compiler.defines.shared} vc.project.compiler.defines.release_shared = ${vc.project.compiler.defines.shared} +vc.project.compiler.additionalOptions = /Zc:__cplusplus vc.project.linker.dependencies = ws2_32.lib iphlpapi.lib vc.solution.create = true diff --git a/Encodings/Encodings.progen b/Encodings/Encodings.progen index ebbfaf607..88a4ce2fd 100644 --- a/Encodings/Encodings.progen +++ b/Encodings/Encodings.progen @@ -12,5 +12,6 @@ vc.project.compiler.defines = vc.project.compiler.defines.shared = ${vc.project.name}_EXPORTS vc.project.compiler.defines.debug_shared = ${vc.project.compiler.defines.shared} vc.project.compiler.defines.release_shared = ${vc.project.compiler.defines.shared} +vc.project.compiler.additionalOptions = /Zc:__cplusplus vc.solution.create = true vc.solution.include = testsuite\\TestSuite diff --git a/Encodings/samples/TextConverter/TextConverter.progen b/Encodings/samples/TextConverter/TextConverter.progen index ccd636a33..bf04023b1 100644 --- a/Encodings/samples/TextConverter/TextConverter.progen +++ b/Encodings/samples/TextConverter/TextConverter.progen @@ -7,4 +7,5 @@ vc.project.platforms = Win32 vc.project.configurations = debug_shared, release_shared, debug_static_mt, release_static_mt, debug_static_md, release_static_md vc.project.prototype = ${vc.project.name}_vs90.vcproj vc.project.compiler.include = ..\\..\\..\\Foundation\\include;..\\..\\..\\Encodings\\include +vc.project.compiler.additionalOptions = /Zc:__cplusplus vc.project.linker.dependencies.Win32 = ws2_32.lib iphlpapi.lib diff --git a/Encodings/testsuite/TestSuite.progen b/Encodings/testsuite/TestSuite.progen index bb69d812b..0d83ea307 100644 --- a/Encodings/testsuite/TestSuite.progen +++ b/Encodings/testsuite/TestSuite.progen @@ -7,3 +7,4 @@ vc.project.platforms = Win32 vc.project.configurations = debug_shared, release_shared, debug_static_mt, release_static_mt, debug_static_md, release_static_md vc.project.prototype = TestSuite_vs90.vcproj vc.project.compiler.include = ..\\..\\Foundation\\include;..\\..\\Encodings\\include +vc.project.compiler.additionalOptions = /Zc:__cplusplus diff --git a/Foundation/include/Poco/Version.h b/Foundation/include/Poco/Version.h index 4d9eb570c..eff51fede 100644 --- a/Foundation/include/Poco/Version.h +++ b/Foundation/include/Poco/Version.h @@ -36,6 +36,6 @@ // Bx: beta releases // -#define POCO_VERSION 0x010D0100 +#define POCO_VERSION 0x010D0300 #endif // Foundation_Version_INCLUDED diff --git a/Foundation/samples/ActiveMethod/ActiveMethod.progen b/Foundation/samples/ActiveMethod/ActiveMethod.progen index 7c2c98bb5..518a9d34a 100644 --- a/Foundation/samples/ActiveMethod/ActiveMethod.progen +++ b/Foundation/samples/ActiveMethod/ActiveMethod.progen @@ -7,4 +7,5 @@ vc.project.platforms = Win32 vc.project.configurations = debug_shared, release_shared, debug_static_mt, release_static_mt, debug_static_md, release_static_md vc.project.prototype = ${vc.project.name}_vs90.vcproj vc.project.compiler.include = ..\\..\\..\\Foundation\\include +vc.project.compiler.additionalOptions = /Zc:__cplusplus vc.project.linker.dependencies.Win32 = ws2_32.lib iphlpapi.lib diff --git a/Foundation/samples/Activity/Activity.progen b/Foundation/samples/Activity/Activity.progen index 7c2c98bb5..518a9d34a 100644 --- a/Foundation/samples/Activity/Activity.progen +++ b/Foundation/samples/Activity/Activity.progen @@ -7,4 +7,5 @@ vc.project.platforms = Win32 vc.project.configurations = debug_shared, release_shared, debug_static_mt, release_static_mt, debug_static_md, release_static_md vc.project.prototype = ${vc.project.name}_vs90.vcproj vc.project.compiler.include = ..\\..\\..\\Foundation\\include +vc.project.compiler.additionalOptions = /Zc:__cplusplus vc.project.linker.dependencies.Win32 = ws2_32.lib iphlpapi.lib diff --git a/VERSION b/VERSION index b50dd27dd..01b756823 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.13.1 +1.13.3 diff --git a/doc/99100-ReleaseNotes.page b/doc/99100-ReleaseNotes.page index 25f9f5667..516b5ddc5 100644 --- a/doc/99100-ReleaseNotes.page +++ b/doc/99100-ReleaseNotes.page @@ -1,6 +1,35 @@ POCO C++ Libraries Release Notes AAAIntroduction +!!!Release 1.13.3 + +!!Summary of Changes + +This is a bugfix release. + +!!Security Fixes + + - GH #4496 Upgrade bundled libexpat to 2.6.2 + +!!Features, Enhancements and Third Party Updates + + - GH #4488 Add Poco::Util::Timer::idle() method to check if timer has any tasks scheduled + - GH #3807 DNS.resolve() should not be sorted in HostEntry::removeDuplicates() + - GH #4515 Upgrade bundled SQLite to 3.45.2 + - PR #4517 Optimize Net module for Android + +!!Bug Fixes and Improvements: + + - GH #4505 ODBC Unicode wrappers do not check for null length pointers + - GH #4492 Poco::BasicMemoryStreamBuf is missing seekpos() + - GH #4486 DateTimeFormat RFC1036 Sunday name is short (should be long) + - GH #4468 Poco::URI: don't lowercase host part if it's a Unix domain socket + - GH #4450 Error between Poco::ActiveRecord and Poco::Data::PostgreSQL + - GH #4435 SecureStreamSocket is not thread-safe + - GH #4415 SecureSocketImpl::reset shouldn't close socket + - GH #3857 Thread_POSIX.cpp shouldn't convert thread IDs to long + - GH #3725 secure socket receiveTimeout throwing after configured timeout * 2 + !!!Release 1.13.2 diff --git a/gh-cli-for-release-notes.sh b/gh-cli-for-release-notes.sh index 565f345ef..9a27d6c27 100755 --- a/gh-cli-for-release-notes.sh +++ b/gh-cli-for-release-notes.sh @@ -32,20 +32,30 @@ echo gh issue list -S 'milestone:"'"${MILESTONE}"'" label:breaking' -s all -L 500 --json number,title --jq '.[] | "- GH #\(.number) \(.title)"' gh pr list -S 'milestone:"'"${MILESTONE}"'" label:breaking' -s all -L 500 --json number,title --jq '.[] | "- PR #\(.number) \(.title)"' + echo -echo "Features and Enhancements:" +echo "Security Fixes:" echo -gh issue list -S 'milestone:"'"${MILESTONE}"'" -label:breaking label:enhancement' -s all -L 500 --json number,title --jq '.[] | "- GH #\(.number) \(.title)"' -gh issue list -S 'milestone:"'"${MILESTONE}"'" -label:breaking -label:enhancement label:feature' -s all -L 500 --json number,title --jq '.[] | "- GH #\(.number) \(.title)"' -gh pr list -S 'milestone:"'"${MILESTONE}"'" -label:breaking label:enhancement' -s all -L 500 --json number,title --jq '.[] | "- PR #\(.number) \(.title)"' -gh pr list -S 'milestone:"'"${MILESTONE}"'" -label:breaking -label:enhancement label:feature' -s all -L 500 --json number,title --jq '.[] | "- PR #\(.number) \(.title)"' +gh issue list -S 'milestone:"'"${MILESTONE}"'" -label:breaking label:security' -s all -L 500 --json number,title --jq '.[] | "- GH #\(.number) \(.title)"' +gh pr list -S 'milestone:"'"${MILESTONE}"'" -label:breaking label:security' -s all -L 500 --json number,title --jq '.[] | "- PR #\(.number) \(.title)"' + +echo +echo "Features, Enhancements and Third Party Updates:" +echo + +gh issue list -S 'milestone:"'"${MILESTONE}"'" -label:breaking -label:security label:enhancement' -s all -L 500 --json number,title --jq '.[] | "- GH #\(.number) \(.title)"' +gh issue list -S 'milestone:"'"${MILESTONE}"'" -label:breaking -label:security -label:enhancement label:feature' -s all -L 500 --json number,title --jq '.[] | "- GH #\(.number) \(.title)"' +gh issue list -S 'milestone:"'"${MILESTONE}"'" -label:breaking -label:security -label:enhancement -label:feature label:third-party' -s all -L 500 --json number,title --jq '.[] | "- GH #\(.number) \(.title)"' +gh pr list -S 'milestone:"'"${MILESTONE}"'" -label:breaking -label:security label:enhancement' -s all -L 500 --json number,title --jq '.[] | "- PR #\(.number) \(.title)"' +gh pr list -S 'milestone:"'"${MILESTONE}"'" -label:breaking -label:security -label:enhancement label:feature' -s all -L 500 --json number,title --jq '.[] | "- PR #\(.number) \(.title)"' +gh pr list -S 'milestone:"'"${MILESTONE}"'" -label:breaking -label:security -label:enhancement -label:feature label:third-party' -s all -L 500 --json number,title --jq '.[] | "- PR #\(.number) \(.title)"' echo echo "Bug Fixes and Improvements:" echo -gh issue list -S 'milestone:"'"${MILESTONE}"'" -label:breaking -label:enhancement -label:feature' -s all -L 500 --json number,title --jq '.[] | "- GH #\(.number) \(.title)"' -gh pr list -S 'milestone:"'"${MILESTONE}"'" -label:breaking -label:enhancement -label:feature' -s all -L 500 --json number,title --jq '.[] | "- PR #\(.number) \(.title)"' +gh issue list -S 'milestone:"'"${MILESTONE}"'" -label:breaking -label:enhancement -label:feature -label:security -label:third-party' -s all -L 500 --json number,title --jq '.[] | "- GH #\(.number) \(.title)"' +gh pr list -S 'milestone:"'"${MILESTONE}"'" -label:breaking -label:enhancement -label:feature -label:security -label:third-party' -s all -L 500 --json number,title --jq '.[] | "- PR #\(.number) \(.title)"' echo diff --git a/libversion b/libversion index 398050c62..a9c8fe829 100644 --- a/libversion +++ b/libversion @@ -1 +1 @@ -101 +103