nanopb-0.4.4 (2020-11-25)
 Fix memory leak with oneofs and PB_ENABLE_MALLOC (#615)
 Fix generator error when oneof contains a single unresolved field size (#610)
 Fix unsigned enums not working correctly inside OneOf (#611)
 Fix recursion depth exceeded error in generator (#493)
 Add '--version' option to nanopb_generator.py (#607)
 Add support for proto3 optional fields introduced in protoc 3.12 (#591)
 Add better error message when enum type is not found (#592)
 Allow specifying descriptorsize on field level also (#546)
 Allow multiple targets to be created by calling NANOPB_GENERATE_CPP() (#596)
 Conanfile: Add protobuf-nanopb library to cpp_info.libs (#605)
 Include version number in generator verbose output
 Convert documentation to markdown format (#587)
 Remove outdated transitional generator/nanopb/options.proto.
 Test case improvements
 Documentation improvements

nanopb-0.4.3 (2020-09-21)
 Fix generator error when output is in current directory (#553)
 Fix issue with unknown message sizes being referred inside oneof encoded size calculation (#569)
 Fix problem with [default=xxxx, (nanopb).proto3=true] field option combination (#558)
 Fix cross compilation with Conan build system (#568)
 Better support C++ types in generated structs (#577)
 CMake rule improvements (#554, #555, #556, #561, #564)
 Generator: fix compatibility bug with Python 3.1 and earlier
 Make Linux and Mac packages use grpcio protoc
 Make pb_decode_varint32() reject overlong varint encodings.
 Performance optimizations
 Test case improvements
 Documentation improvements

NOTE: version 0.4.3 changes layout of pb_msgdesc_t. It requires recompiling .pb.c files and
thus breaks ABI compatibility. In general, ABI compatibility is not currently maintained
between any nanopb versions.

NOTE: There was an apparent false positive virus identification by Windows Defender of the
PyInstaller 3.6 based Windows package nanopb-0.4.3-windows-x86.zip. The package was replaced
by nanopb-0.4.3-p1-windows-x86.zip with rebuilt PyInstaller 4.0, which seems to avoid the problem.
Actual nanopb code is unchanged between the packages.

nanopb-0.4.2 (2020-06-23)
 Fix buffer overflow when encoding bytes with size set to 65535 (#547, GHSA-3p39-mfxg-hrq4)
 Fix segfault with pointer fields and proto3_singular_msgs = true. (#504,#505)
 Fix Windows 10 temp file handling (#486)
 Fix macro name conflicts (ATMEGA32U4 UENUM and more) (#522)
 Fix generator error with nested messages and default values (#487)
 Fix nanopb_generator exception on enums with aliases (#535)
 Fix compile error when struct members are called X or a (#492)
 Fix sizeof(union ...) fallback not compiling with C++ (#415, #494)
 Fix "missing required field" error with submessage callback (#544)
 Fix field descriptor sizing with submsg_callback option (#545)
 Fix protoc calling on Python 2 (#503)
 Fix handling of varying NaN representations in PB_CONVERT_DOUBLE_FLOAT (#543)
 Fix clang undefined behavior sanitizer errors.
 Change generator to use Python 3 by default (#441, #509)
 Binary packages updated to use Python 3 and grpcio-tools
 Add support for infinity and nan floating-point defaults (#530, #538)
 Add generator option sort_by_tag (#542)
 Add type_override option to override type defined in .proto (#497)
 Set proto2 enum fields to first value when no default is given, even if nonzero (#532,#539)
 Include protoc-gen-nanopb in path in protoc wrapper script
 Properly pass error status from protoc wrapper when calling binary protoc
 Generator: pass --include_imports when calling protoc (#494)
 Create intermediate directories when writing files to relative path (#512)
 Add current directory to include path for protoc (#499)
 Update readme to use nanopb_generator.py directly
 Regression test for proto3 incorrectly considered empty (#504)
 CMake: change package name to Nanopb for cmake 3.17 compatibility (#506)
 CMake: remove find_package(PythonInterp) (#508)
 CMake: use split --nanopb_opt only on protoc >= 3.6 (#515)
 CMake: Relax python version spec, allowing Python3. (#534)
 Swift package manager (#549)
 Rename BUILD as BUILD.bazel (#537)

Note: Windows binary packages in 0.4.2 and later require Windows 7 or newer.

nanopb-0.4.1 (2020-02-02)
 Fix invalid free() after failed realloc() (GHSA-gcx3-7m76-287p)
 Avoid overflows in allocation for packed fields.
 Verify stream size before allocating string / bytes.
 Add workaround for avr-libc realloc() bug (#475)
 Fix bug with field numbers >255 (#407)
 Fix compilation error on platforms without uint8_t (#485)
 Fix warnings on Python3.8 (#399, #467)
 Make fixed_count option work when combined with FT_POINTER.
 Add missing #define for submsg callbacks, add regression test (#472)
 Fix ImportError when using generator/protoc with Python 3
 Remove accidental debug code in generator
 Reduce stack usage (#484)
 Remove PB_FIELDINFO_WIDTH option (#473)
 Add nanopb-specific package name option (#422)
 Add testcase for Any type (#163)
 Add exclude option also from .proto/.options
 Set default include path in the grpc_tools protoc wrapper.
 Add workaround for python-protobuf 3.6.1 bug (#478)
 Detect invalid wire type when decoding fields.
 Improved fuzz testing

nanopb-0.4.0 (2019-12-20)
 New field descriptor format.
 Make nanopb_generator automatically compile .proto files (#462)
 Allow installing as Python package from pip (#460)
 Use protoc from grpcio-tools Python package if available (#463)
 Change proto3 message types to be optional (#308, #452)
 Add pb_decode_ex(), pb_encode_ex() functions.
 Automatically rebuild nanopb_pb2.py
 Use plugin.proto that comes with python-protobuf (#234)

 Allow specifying a per-message callback. (#175)
 Improve callback handling inside oneofs. (#175)

 Introduce new compile time flag: PB_VALIDATE_UTF8 (#437)
 Add TypenameMangling.M_PACKAGE_INITIALS (#394)
 Introduce new compile time flag: PB_ENCODE_ARRAYS_UNPACKED (#427)
 Add default_has option (#423)
 Add option for including extra files from .pb.h
 Add generator option to error out on unmatched options (#458)
 Generator: Allow comma separated options in plugin mode (#343)
 Allow comma-separated option parsing to handle `#include` (#450)
 Remove timestamp from generated files by default, add -t to keep it.
 Make --no-strip-path default (#326)
 Fix .options file case sensitivity on Windows.
 Fix generator error with mangle_names option (#380)
 Take int_size setting into account in calculating message sizes (#373)
 .gitignore: don't ignore generator-bin files (#419)
 Cleanup .pb.h header format

 Make tests run on AVR and STM32
 Add PB_CONVERT_DOUBLE_FLOAT setting to convert doubles on AVR.
 Store field descriptor constants in flash on AVR (#464)
 Added "f" suffix to const float declarations. (#453)
 Fix clang-tidy warnings about using signed integers in binary bitwise operations (#451)
 Add C++ message descriptors helper (#384)
 Implement conan recipe (#378)
 CMake: Split nanopb_out command (#454)
 CMake: install created shared library(dll) in windows to the binary folder (#447)

nanopb-0.3.9.6 (2020-06-23)
 Fix buffer overflow when encoding bytes with size set to 65535 (#547, GHSA-3p39-mfxg-hrq4)
 Fix proto3 submessage improperly considered empty (#504)
 Fix ImportError when using generator/protoc with Python 3
 Add build rules for Swift package manager (#549)

nanopb-0.3.9.5 (2020-02-02)
 Fix invalid free() after failed realloc() (GHSA-gcx3-7m76-287p)
 Add workaround for avr-libc realloc() bug (#475)
 Fix empty submessages getting encoded in proto3 mode (#395)
 Avoid overflows in allocation for packed fields.

nanopb-0.3.9.4 (2019-10-13)
 Fix undefined behavior with bool fields (#434)
 Fix enum min/max defines when values are not in order (#405)
 Fix network_server socket example with zero-length strings (#421)
 Don't call stream read callback with count=0 (#421)
 Add compile time flag PB_ENCODE_ARRAYS_UNPACKED (#427)

nanopb-0.3.9.3 (2019-03-08)
 NOTE: nanopb-0.3.9.3.tar.gz before 2019-03-21 was accidentally from 0.4 branch (#388)
 Fix fixed size and callback repeated fields inside proto3 submessages (#376, #382, #386)
 Fix incorrect PB_STATIC_ASSERT for bytes inside oneof (#363)
 Fix generator error with mangle_names option (#380)
 Generator: Allow comma separated options in plugin mode (#343)

nanopb-0.3.9.2 (2018-11-10)
 Erroneous free() when using callbacks combined with PB_ENABLE_MALLOC (#346)
 Fix possible null-pointer dereference in decode_callback_field (#342)
 Fix FindNanopb.cmake on Windows (#335)
 Fix large generator memory usage with oneof fields (#338)
 Fix error in splint test (#359)
 Allow cmake to build as a shared library (#352, #353)
 Add --no-strip-path command line option (#326)
 Option for flattening nested protobuf names (#333)
 Documentation fixes (#329, #350, #358)
 Better error messages (#351)

nanopb-0.3.9.1 (2018-04-14)
 Fix handling of special characters in string/bytes default values (issue #322)
 Fix encoding of negative numbers with PB_WITHOUT_64BIT (#285)
 Fix _zero initializer for enums that don't begin at 0. (#295)
 Multiple CMake fixes (#296, #299, #304, #312, #320)
 Fix compiler warnings (#305)
 Fix scons rules for Python 3
 Add check for large extension field number (issue #306)
 Updated included descriptor.proto version (#314)
 Resolve oneof sizes symbolically when needed (#311)
 Add fixed_count option (#260)
 Add some verbose prints in generator (issue #238)
 Add test/example of using 'map' type. (#289)

nanopb-0.3.9 (2017-09-23)
 Fix bugs in proto3 encoding of submessages (#256)
 Fix message size calculation for arrays of size 1 (#253)
 Fix segfault with FT_CALLBACK inside FT_POINTER (#259)
 Properly detect truncated tags in corrupted messages (#277)
 Make pb_decode_varint32 overflow checks exact (#258)
 Add option to build without 64-bit support (#86)
 Add options to define source and header file extensions (#264)
 Add pb_en/decode_nullterminated() (part of #278)
 Add pb_decode_delimited_noinit (#284)
 CMake: add dependency for .options file (#265)
 CMake: change use of relative paths (#250,#271,#273)
 Better error message for missing max_size option (#281)
 Travis-CI build fixes (#283)
 Add Bazel build system file (#266)

nanopb-0.3.8 (2017-03-05)
 Fix problems with multiple oneofs in same message (#229)
 Zero-valued extension fields were mistakenly ignored by encoder (#242)
 Multiple fixes related to proto3 mode (#242, #245, #247, #249)
 Fix potential unaligned access (#226, #227)
 Fix documentation for protoc --plugin argument (#239)
 Extend inline / fixed length bytes array support (#244)
 Add new option max_length for strings (#107)
 Make string substream API more robust (#230)
 Make pb_decode_varint32 public API (#231)
 Allow overriding proto3 mode (#228)
 Add optional enum->string mapping function (#223)
 Add transitional options.proto file (#241)
 Add better error message on Python library version imcompatibility (#240)
 Include version number in PlatformIO library.json (#222)
 CMake build script changes (#236, #237)
 Change download links to https
 Improvements to test cases.

nanopb-0.3.7 (2016-10-30)
 Add support for proto3-style singular fields (#182, #206, #216)
 Updated binary package protoc to version 3.1.0
 Add FT_INLINE allocation of bytes fields (#211)
 Include package name in include guard (#207)
 Fix missing warning with large bytes fields (issue #220)
 Added CMake project (#208)
 Add bazel BUILD file for nanopb (#209)
 Added an AUTHORS file (#211)
 Documentation updates
 Improvements to test cases.

nanopb-0.3.6 (2016-06-19)
 Protect against corrupted _count fields in pb_release (#205)
 Fix error in STATIC_ASSERT with multiple files (#203)
 Add -D option to specify output directory (#193)
 Generate MIN/MAX/ARRAYSIZE defines for enums (#194)
 Generate comments about uncalculable message sizes (#195)
 Documentation updates (#196, #201)
 Improvements to test cases.

nanopb-0.3.5 (2016-02-13)
 NOTE: If you are using pb_syshdr.h, you will need to add uint_least8_t
 definition. See docs/migration.rst for details.

 Fix generator crash with Enum inside Oneof (#188)
 Fix some generator regressions related to .options file path (#172)
 Add support for platforms without uint8_t (#191)
 Allow const parameter to pb_istream_from_buffer (#152)
 Ignore null pointers in pb_release() (#183)
 Add support for anonymous unions (#184)
 Add Python3 support to the generator (#169)
 Add code generator insertion points to generated files (#178)
 Improvements to CMake script (#181)
 Improvements to test cases.

nanopb-0.3.4 (2015-09-26)
 Fix handling of unsigned 8- and 16-bit enums (issue 164)
 Fix generator on systems where python = python3. (issue 155)
 Fix compiler warning on GCC 5.x (issue 171)
 Make the generator better handle imported .protos (issue 165)
 Add packed_enum option to generator.
 Add syntax= line to .proto files (issue 167)
 Add PlatformIO registry manifest file. (pr 156)

nanopb-0.3.3 (2015-04-10)
 Fix missing files in Linux binary package (issue 146)
 Fix generator bug when oneof is first field in a message. (issue 142)
 Fix generator error when long_names:false is combined with Oneofs. (issue 147)
 Fix oneof submessage initialization bug. (issue 149)
 Fix problem with plugin options on Python 2.7.2 and older. (issue 153)
 Fix crash when callback is inside oneof field. (issue 148)
 Switch to .tar.gz format for Mac OS X packages. (issue 154)
 Always define enum long names so that cross-file references work. (issue 118)
 Add msgid generator option. (issue 151)
 Improve comment support in .options files. (issue 145)
 Updates for the CMake rule file, add cmake example.
 Better error messages for syntax errors in .options file

nanopb-0.3.2 (2015-01-24)
 Fix memory leaks with PB_ENABLE_MALLOC with some submessage hierarchies (issue 138)
 Implement support for oneofs (C unions). (issues 131, 141)
 Add int_size option for generator (issue 139)
 Add compilation option to disable struct packing. (issue 136)
 Change PB_RETURN_ERROR() macro to avoid compiler warnings (issue 140)
 Fix build problems with protoc 3.0.0
 Add support for POINTER type in extensions
 Initialize also extension fields to defaults in pb_decode().
 Detect too large varint values when decoding.

nanopb-0.3.1 (2014-09-11)
 Fix security issue due to size_t overflows. (issue 132)
 Fix memory leak with duplicated fields and PB_ENABLE_MALLOC
 Fix crash if pb_release() is called twice.
 Fix cyclic message support (issue 130)
 Fix error in generated initializers for repeated pointer fields.
 Improve tests (issues 113, 126)

nanopb-0.3.0 (2014-08-26)
 NOTE: See docs/migration.html or online at
 http://koti.kapsi.fi/~jpa/nanopb/docs/migration.html
 for changes in this version. Most importantly, you need to add
 pb_common.c to the list of files to compile.

 Separated field iterator logic to pb_common.c (issue 128)
 Change the _count fields to use pb_size_t datatype (issue 82)
 Added PB_ prefix to macro names (issue 106)
 Added #if version guard to generated files (issue 129)
 Added migration document

nanopb-0.2.9.5 (2020-06-23)
 Fix buffer overflow when encoding bytes with size set to 65535 (#547, GHSA-3p39-mfxg-hrq4)
 Backport Python 3 and protoc 3.x fixes to test cases

nanopb-0.2.9.4 (2020-02-02)
 Fix invalid free() after failed realloc() (GHSA-gcx3-7m76-287p)
 Add workaround for avr-libc realloc() bug (#475)

nanopb-0.2.9.3 (2016-06-19)
 Protect against corrupted _count fields in pb_release (#205)

nanopb-0.2.9.2 (2015-01-24)
 Fix memory leaks with PB_ENABLE_MALLOC with some submessage hierarchies (issue 138)
 Fix compilation error with generated initializers for repeated pointer fields

nanopb-0.2.9.1 (2014-09-11)
 Fix security issue due to size_t overflows. (issue 132)
 Fix memory leak with duplicated fields and PB_ENABLE_MALLOC
 Fix crash if pb_release() is called twice.

nanopb-0.2.9 (2014-08-09)
 NOTE: If you are using the -e option with the generator, you have
 to prepend . to the argument to get the same behaviour as before.

 Do not automatically add a dot with generator -e option. (issue 122)
 Fix problem with .options file and extension fields. (issue 125)
 Don't use SIZE_MAX macro, as it is not in C89. (issue 120)
 Generate #defines for initializing message structures. (issue 79)
 Add skip_message option to generator. (issue 121)
 Add PB_PACKED_STRUCT support for Keil MDK-ARM toolchain (issue 119)
 Give better messages about the .options file path. (issue 124)
 Improved tests

nanopb-0.2.8 (2014-05-20)
 Fix security issue with PB_ENABLE_MALLOC. (issue 117)
 Add option to not add timestamps to .pb.h and .pb.c preambles. (issue 115)
 Documentation updates
 Improved tests

nanopb-0.2.7 (2014-04-07)
 Fix bug with default values for extension fields (issue 111)
 Fix some MISRA-C warnings (issue 91)
 Implemented optional malloc() support (issue 80)
 Changed pointer-type bytes field datatype
 Add a "found" field to pb_extension_t (issue 112)
 Add convenience function pb_get_encoded_size() (issue 16)

nanopb-0.2.6 (2014-02-15)
 Fix generator error with bytes callback fields (issue 99)
 Fix warnings about large integer constants (issue 102)
 Add comments to where STATIC_ASSERT is used (issue 96)
 Add warning about unknown field names on .options (issue 105)
 Move descriptor.proto to google/protobuf subdirectory (issue 104)
 Improved tests

nanopb-0.2.5 (2014-01-01)
 Fix a bug with encoding negative values in int32 fields (issue 97)
 Create binary packages of the generator + dependencies (issue 47)
 Add support for pointer-type fields to the encoder (part of issue 80)
 Fixed path in FindNanopb.cmake (issue 94)
 Improved tests

nanopb-0.2.4 (2013-11-07)
 Remove the deprecated NANOPB_INTERNALS functions from public API.
 Document the security model.
 Check array and bytes max sizes when encoding (issue 90)
 Add #defines for maximum encoded message size (issue 89)
 Add #define tags for extension fields (issue 93)
 Fix MISRA C violations (issue 91)
 Clean up pb_field_t definition with typedefs.

nanopb-0.2.3 (2013-09-18)
 Improve compatibility by removing ternary operator from initializations (issue 88)
 Fix build error on Visual C++ (issue 84, patch by Markus Schwarzenberg)
 Don't stop on unsupported extension fields (issue 83)
 Add an example pb_syshdr.h file for non-C99 compilers
 Reorganize tests and examples into subfolders (issue 63)
 Switch from Makefiles to scons for building the tests
 Make the tests buildable on Windows

nanopb-0.2.2 (2013-08-18)
 Add support for extension fields (issue 17)
 Fix unknown fields in empty message (issue 78)
 Include the field tags in the generated .pb.h file.
 Add pb_decode_delimited and pb_encode_delimited wrapper functions (issue 74)
 Add a section in top of pb.h for changing compilation settings (issue 76)
 Documentation improvements (issues 12, 77 and others)
 Improved tests

nanopb-0.2.1 (2013-04-14)
 NOTE: The default callback function signature has changed.
       If you don't want to update your code, define PB_OLD_CALLBACK_STYLE.
 
 Change the callback function to use void** (issue 69)
 Add support for defining the nanopb options in a separate file (issue 12)
 Add support for packed structs in IAR and MSVC (in addition to GCC) (issue 66)
 Implement error message support for the encoder side (issue 7)
 Handle unterminated strings when encoding (issue 68)
 Fix bug with empty strings in repeated string callbacks (issue 73)
 Fix regression in 0.2.0 with optional callback fields (issue 70)
 Fix bugs with empty message types (issues 64, 65)
 Fix some compiler warnings on clang (issue 67)
 Some portability improvements (issues 60, 62)
 Various new generator options
 Improved tests

nanopb-0.2.0 (2013-03-02)
 NOTE: This release requires you to regenerate all .pb.c
       files. Files generated by older versions will not
       compile anymore.

 Reformat generated .pb.c files using macros (issue 58)
 Rename PB_HTYPE_ARRAY -> PB_HTYPE_REPEATED
 Separate PB_HTYPE to PB_ATYPE and PB_HTYPE
 Move STATIC_ASSERTs to .pb.c file
 Added CMake file (by Pavel Ilin)
 Add option to give file extension to generator (by Michael Haberler)
 Documentation updates

nanopb-0.1.9 (2013-02-13)
 Fixed error message bugs (issues 52, 56)
 Sanitize #ifndef filename (issue 50)
 Performance improvements
 Add compile-time option PB_BUFFER_ONLY
 Add Java package name to nanopb.proto
 Check for sizeof(double) == 8 (issue 54)
 Added generator option to ignore some fields. (issue 51)
 Added generator option to make message structs packed. (issue 49)
 Add more test cases.

nanopb-0.1.8 (2012-12-13)
 Fix bugs in the enum short names introduced in 0.1.7 (issues 42, 43)
 Fix STATIC_ASSERT macro when using multiple .proto files. (issue 41)
 Fix missing initialization of istream.errmsg
 Make tests/Makefile work for non-gcc compilers (issue 40)

nanopb-0.1.7 (2012-11-11)
 Remove "skip" mode from pb_istream_t callbacks. Example implementation had a bug. (issue 37)
 Add option to use shorter names for enum values (issue 38)
 Improve options support in generator (issues 12, 30)
 Add nanopb version number to generated files (issue 36)
 Add extern "C" to generated headers (issue 35)
 Add names for structs to allow forward declaration (issue 39)
 Add buffer size check in example (issue 34)
 Fix build warnings on MS compilers (issue 33)

nanopb-0.1.6 (2012-09-02)
 Reorganize the field decoder interface (issue 2)
 Improve performance in submessage decoding (issue 28)
 Implement error messages in the decoder side (issue 7)
 Extended testcases (alltypes test is now complete).
 Fix some compiler warnings (issues 25, 26, 27, 32).

nanopb-0.1.5 (2012-08-04)
 Fix bug in decoder with packed arrays (issue 23).
 Extended testcases.
 Fix some compiler warnings.

nanopb-0.1.4 (2012-07-05)
 Add compile-time options for easy-to-use >255 field support.
 Improve the detection of missing required fields.
 Added example on how to handle union messages.
 Fix generator error with .proto without messages.
 Fix problems that stopped the code from compiling with some compilers.
 Fix some compiler warnings.

nanopb-0.1.3 (2012-06-12)
 Refactor the field encoder interface.
 Improve generator error messages (issue 5)
 Add descriptor.proto into the #include exclusion list
 Fix some compiler warnings.

nanopb-0.1.2 (2012-02-15)
 Make the generator to generate include for other .proto files (issue 4).
 Fixed generator not working on Windows (issue 3)

nanopb-0.1.1 (2012-01-14)
 Fixed bug in encoder with 'bytes' fields (issue 1).
 Fixed a bug in the generator that caused a compiler error on sfixed32 and sfixed64 fields.
 Extended testcases.

nanopb-0.1.0 (2012-01-06)
 First stable release.
