diff --git a/inc/qcbor/qcbor_common.h b/inc/qcbor/qcbor_common.h
index b4afb37..0575fd5 100644
--- a/inc/qcbor/qcbor_common.h
+++ b/inc/qcbor/qcbor_common.h
@@ -392,9 +392,9 @@
     *  decoding possible.*/
    QCBOR_ERR_NO_STRING_ALLOCATOR = 45,
 
-   /** Error allocating space for a string, usually for an
-    *  indefinite-length string. This error makes no further decoding
-    *  possible. */
+   /** Error allocating memory for a string, usually out of memory.
+    * This primarily occurs decoding indefinite-length strings. This
+    * error makes no further decoding possible. */
    QCBOR_ERR_STRING_ALLOCATE = 46,
 
    /** During decoding, the type of the label for a map entry is not
diff --git a/src/qcbor_decode.c b/src/qcbor_decode.c
index 693152f..5a2a4e3 100644
--- a/src/qcbor_decode.c
+++ b/src/qcbor_decode.c
@@ -765,8 +765,8 @@
  * @param[out] puArgument        The decoded argument.
  * @param[out] pnAdditionalInfo  The decoded Lower 5 bits of initial byte.
  *
- * @retval QCBOR_ERR_UNSUPPORTED
- * @retval QCBOR_ERR_HIT_END
+ * @retval QCBOR_ERR_UNSUPPORTED Encountered unsupported/reserved features
+ * @retval QCBOR_ERR_HIT_END Unexpected end of input
  *
  * This decodes the CBOR "head" that every CBOR data item has. See
  * longer explaination of the head in documentation for
@@ -843,7 +843,7 @@
  * @param[in] uArgument      The argument from the head.
  * @param[out] pDecodedItem  The filled in decoded item.
  *
- * @retval QCBOR_ERR_INT_OVERFLOW
+ * @retval QCBOR_ERR_INT_OVERFLOW Too-large negative encountered
  *
  * Must only be called when major type is 0 or 1.
  *
@@ -932,9 +932,12 @@
  * @param[in] uArgument         The argument from the head.
  * @param[out] pDecodedItem     The filled in decoded item.
  *
- * @retval QCBOR_ERR_HALF_PRECISION_DISABLED
- * @retval QCBOR_ERR_ALL_FLOAT_DISABLED
- * @retval QCBOR_ERR_BAD_TYPE_7
+ * @retval QCBOR_ERR_HALF_PRECISION_DISABLED Half-precision in input, but decode
+ *                                           of half-precision disabled
+ * @retval QCBOR_ERR_ALL_FLOAT_DISABLED      Float-point in input, but all float
+ *                                           decode is disabled.
+ * @retval QCBOR_ERR_BAD_TYPE_7              Not-allowed representation of simple
+ *                                           type in input.
  */
 
 static QCBORError
@@ -1049,9 +1052,9 @@
  * @param[in] pUInBuf        The surce from which to read the string's bytes.
  * @param[out] pDecodedItem  The filled in decoded item.
  *
- * @retval QCBOR_ERR_HIT_END
- * @retval QCBOR_ERR_STRING_ALLOCATE
- * @retval QCBOR_ERR_STRING_TOO_LONG
+ * @retval QCBOR_ERR_HIT_END          Unexpected end of input.
+ * @retval QCBOR_ERR_STRING_ALLOCATE  Out of memory.
+ * @retval QCBOR_ERR_STRING_TOO_LONG  String longer than SIZE_MAX - 4.
  *
  * The reads @c uStrlen bytes from @c pUInBuf and fills in @c
  * pDecodedItem. If @c pAllocator is not NULL then memory for the
@@ -1166,15 +1169,21 @@
  * @param[out] pDecodedItem  The filled-in decoded item.
  * @param[in] pAllocator    The allocator to use for strings or NULL.
  *
- * @retval QCBOR_ERR_UNSUPPORTED
- * @retval QCBOR_ERR_HIT_END
- * @retval QCBOR_ERR_INT_OVERFLOW
- * @retval QCBOR_ERR_STRING_ALLOCATE
- * @retval QCBOR_ERR_STRING_TOO_LONG
- * @retval QCBOR_ERR_HALF_PRECISION_DISABLED
- * @retval QCBOR_ERR_ALL_FLOAT_DISABLED
- * @retval QCBOR_ERR_BAD_TYPE_7
- * @retval QCBOR_ERR_INDEF_LEN_ARRAYS_DISABLED
+ * @retval QCBOR_ERR_UNSUPPORTED             Encountered unsupported/reserved
+ *                                           features
+ * @retval QCBOR_ERR_HIT_END                 Unexpected end of input
+ * @retval QCBOR_ERR_INT_OVERFLOW            Too-large negative encountered
+ * @retval QCBOR_ERR_STRING_ALLOCATE         Out of memory.
+ * @retval QCBOR_ERR_STRING_TOO_LONG         String longer than SIZE_MAX - 4.
+ * @retval QCBOR_ERR_HALF_PRECISION_DISABLED Half-precision in input, but decode
+ *                                           of half-precision disabled
+ * @retval QCBOR_ERR_ALL_FLOAT_DISABLED      Float-point in input, but all
+ *                                           float decode is disabled.
+ * @retval QCBOR_ERR_BAD_TYPE_7              Not-allowed representation of
+ *                                           simple type in input.
+ * @retval QCBOR_ERR_INDEF_LEN_ARRAYS_DISABLED  Indefinite length map/array
+ *                                              in input, but indefinite
+ *                                              lengths disabled.
  *
  * This decodes the most primitive / atomic data item. It does
  * no combing of data items.
@@ -1282,18 +1291,27 @@
  * @param[in] pMe   Decoder context
  * @param[out] pDecodedItem  The decoded item that work is done on.
  *
- * @retval QCBOR_ERR_UNSUPPORTED
- * @retval QCBOR_ERR_HIT_END
- * @retval QCBOR_ERR_INT_OVERFLOW
- * @retval QCBOR_ERR_STRING_ALLOCATE
- * @retval QCBOR_ERR_STRING_TOO_LONG
- * @retval QCBOR_ERR_HALF_PRECISION_DISABLED
- * @retval QCBOR_ERR_ALL_FLOAT_DISABLED
- * @retval QCBOR_ERR_BAD_TYPE_7
- * @retval QCBOR_ERR_INDEF_LEN_ARRAYS_DISABLED
- * @retval QCBOR_ERR_NO_STRING_ALLOCATOR
- * @retval QCBOR_ERR_INDEFINITE_STRING_CHUNK
- * @retval QCBOR_ERR_INDEF_LEN_STRINGS_DISABLED
+ * @retval QCBOR_ERR_UNSUPPORTED             Encountered unsupported/reserved
+ *                                           features
+ * @retval QCBOR_ERR_HIT_END                 Unexpected end of input
+ * @retval QCBOR_ERR_INT_OVERFLOW            Too-large negative encountered
+ * @retval QCBOR_ERR_STRING_ALLOCATE         Out of memory.
+ * @retval QCBOR_ERR_STRING_TOO_LONG         String longer than SIZE_MAX - 4.
+ * @retval QCBOR_ERR_HALF_PRECISION_DISABLED Half-precision in input, but decode
+ *                                           of half-precision disabled
+ * @retval QCBOR_ERR_ALL_FLOAT_DISABLED      Float-point in input, but all
+ *                                           float decode is disabled.
+ * @retval QCBOR_ERR_BAD_TYPE_7              Not-allowed representation of
+ *                                           simple type in input.
+ * @retval QCBOR_ERR_INDEF_LEN_ARRAYS_DISABLED  Indefinite length map/array
+ *                                              in input, but indefinite
+ *                                              lengths disabled.
+ * @retval QCBOR_ERR_NO_STRING_ALLOCATOR     Indefinite-length string in input,
+ *                                           but no string allocator.
+ * @retval QCBOR_ERR_INDEFINITE_STRING_CHUNK  Error in indefinite-length string.
+ * @retval QCBOR_ERR_INDEF_LEN_STRINGS_DISABLED  Indefinite-length string in
+ *                                               input, but indefinite-length
+ *                                               strings are disabled.
  *
  * If @c pDecodedItem is not an indefinite-length string, this does nothing.
  *
@@ -1523,20 +1541,29 @@
  *
  * @param[in] pMe            Decoder context
  * @param[out] pDecodedItem  The decoded item that work is done on.
-
- * @retval QCBOR_ERR_UNSUPPORTED
- * @retval QCBOR_ERR_HIT_END
- * @retval QCBOR_ERR_INT_OVERFLOW
- * @retval QCBOR_ERR_STRING_ALLOCATE
- * @retval QCBOR_ERR_STRING_TOO_LONG
- * @retval QCBOR_ERR_HALF_PRECISION_DISABLED
- * @retval QCBOR_ERR_ALL_FLOAT_DISABLED
- * @retval QCBOR_ERR_BAD_TYPE_7
- * @retval QCBOR_ERR_INDEF_LEN_ARRAYS_DISABLED
- * @retval QCBOR_ERR_NO_STRING_ALLOCATOR
- * @retval QCBOR_ERR_INDEFINITE_STRING_CHUNK
- * @retval QCBOR_ERR_INDEF_LEN_STRINGS_DISABLED
- * @retval QCBOR_ERR_TOO_MANY_TAGS
+ *
+ * @retval QCBOR_ERR_UNSUPPORTED             Encountered unsupported/reserved
+ *                                           features
+ * @retval QCBOR_ERR_HIT_END                 Unexpected end of input
+ * @retval QCBOR_ERR_INT_OVERFLOW            Too-large negative encountered
+ * @retval QCBOR_ERR_STRING_ALLOCATE         Out of memory.
+ * @retval QCBOR_ERR_STRING_TOO_LONG         String longer than SIZE_MAX - 4.
+ * @retval QCBOR_ERR_HALF_PRECISION_DISABLED Half-precision in input, but decode
+ *                                           of half-precision disabled
+ * @retval QCBOR_ERR_ALL_FLOAT_DISABLED      Float-point in input, but all
+ *                                           float decode is disabled.
+ * @retval QCBOR_ERR_BAD_TYPE_7              Not-allowed representation of
+ *                                           simple type in input.
+ * @retval QCBOR_ERR_INDEF_LEN_ARRAYS_DISABLED  Indefinite length map/array
+ *                                              in input, but indefinite
+ *                                              lengths disabled.
+ * @retval QCBOR_ERR_NO_STRING_ALLOCATOR     Indefinite-length string in input,
+ *                                           but no string allocator.
+ * @retval QCBOR_ERR_INDEFINITE_STRING_CHUNK  Error in indefinite-length string.
+ * @retval QCBOR_ERR_INDEF_LEN_STRINGS_DISABLED  Indefinite-length string in
+ *                                               input, but indefinite-length
+ *                                               strings are disabled.
+ * @retval QCBOR_ERR_TOO_MANY_TAGS           Too many tag numbers on item.
  *
  * This loops getting atomic data items until one is not a tag
  * number.  Usually this is largely pass-through because most
@@ -1619,21 +1646,30 @@
  * @param[in] pMe            Decoder context
  * @param[out] pDecodedItem  The decoded item that work is done on.
  *
- * @retval QCBOR_ERR_UNSUPPORTED
- * @retval QCBOR_ERR_HIT_END
- * @retval QCBOR_ERR_INT_OVERFLOW
- * @retval QCBOR_ERR_STRING_ALLOCATE
- * @retval QCBOR_ERR_STRING_TOO_LONG
- * @retval QCBOR_ERR_HALF_PRECISION_DISABLED
- * @retval QCBOR_ERR_ALL_FLOAT_DISABLED
- * @retval QCBOR_ERR_BAD_TYPE_7
- * @retval QCBOR_ERR_INDEF_LEN_ARRAYS_DISABLED
- * @retval QCBOR_ERR_NO_STRING_ALLOCATOR
- * @retval QCBOR_ERR_INDEFINITE_STRING_CHUNK
- * @retval QCBOR_ERR_INDEF_LEN_STRINGS_DISABLED
- * @retval QCBOR_ERR_TOO_MANY_TAGS
- * @retval QCBOR_ERR_ARRAY_DECODE_TOO_LONG
- * @retval QCBOR_ERR_MAP_LABEL_TYPE
+ * @retval QCBOR_ERR_UNSUPPORTED             Encountered unsupported/reserved
+ *                                           features
+ * @retval QCBOR_ERR_HIT_END                 Unexpected end of input
+ * @retval QCBOR_ERR_INT_OVERFLOW            Too-large negative encountered
+ * @retval QCBOR_ERR_STRING_ALLOCATE         Out of memory.
+ * @retval QCBOR_ERR_STRING_TOO_LONG         String longer than SIZE_MAX - 4.
+ * @retval QCBOR_ERR_HALF_PRECISION_DISABLED Half-precision in input, but decode
+ *                                           of half-precision disabled
+ * @retval QCBOR_ERR_ALL_FLOAT_DISABLED      Float-point in input, but all
+ *                                           float decode is disabled.
+ * @retval QCBOR_ERR_BAD_TYPE_7              Not-allowed representation of
+ *                                           simple type in input.
+ * @retval QCBOR_ERR_INDEF_LEN_ARRAYS_DISABLED  Indefinite length map/array
+ *                                              in input, but indefinite
+ *                                              lengths disabled.
+ * @retval QCBOR_ERR_NO_STRING_ALLOCATOR     Indefinite-length string in input,
+ *                                           but no string allocator.
+ * @retval QCBOR_ERR_INDEFINITE_STRING_CHUNK  Error in indefinite-length string.
+ * @retval QCBOR_ERR_INDEF_LEN_STRINGS_DISABLED  Indefinite-length string in
+ *                                               input, but indefinite-length
+ *                                               strings are disabled.
+ * @retval QCBOR_ERR_TOO_MANY_TAGS           Too many tag numbers on item.
+ * @retval QCBOR_ERR_ARRAY_DECODE_TOO_LONG   Too many items in array.
+ * @retval QCBOR_ERR_MAP_LABEL_TYPE          Map label not string or integer.
  *
  * If a the current nesting level is a map, then this
  * combines pairs of items into one data item with a label
@@ -1859,25 +1895,36 @@
  *
  * @param[in] pMe            Decoder context
  * @param[out] pDecodedItem  The decoded item that work is done on.
- *
- * @retval QCBOR_ERR_UNSUPPORTED
- * @retval QCBOR_ERR_HIT_END
- * @retval QCBOR_ERR_INT_OVERFLOW
- * @retval QCBOR_ERR_STRING_ALLOCATE
- * @retval QCBOR_ERR_STRING_TOO_LONG
- * @retval QCBOR_ERR_HALF_PRECISION_DISABLED
- * @retval QCBOR_ERR_ALL_FLOAT_DISABLED
- * @retval QCBOR_ERR_BAD_TYPE_7
- * @retval QCBOR_ERR_INDEF_LEN_ARRAYS_DISABLED
- * @retval QCBOR_ERR_NO_STRING_ALLOCATOR
- * @retval QCBOR_ERR_INDEFINITE_STRING_CHUNK
- * @retval QCBOR_ERR_INDEF_LEN_STRINGS_DISABLED
- * @retval QCBOR_ERR_TOO_MANY_TAGS
- * @retval QCBOR_ERR_ARRAY_DECODE_TOO_LONG
- * @retval QCBOR_ERR_MAP_LABEL_TYPE
- * @retval QCBOR_ERR_NO_MORE_ITEMS
- * @retval QCBOR_ERR_BAD_BREAK
- * @retval QCBOR_ERR_ARRAY_DECODE_NESTING_TOO_DEEP
+
+ * @retval QCBOR_ERR_UNSUPPORTED             Encountered unsupported/reserved
+ *                                           features
+ * @retval QCBOR_ERR_HIT_END                 Unexpected end of input
+ * @retval QCBOR_ERR_INT_OVERFLOW            Too-large negative encountered
+ * @retval QCBOR_ERR_STRING_ALLOCATE         Out of memory.
+ * @retval QCBOR_ERR_STRING_TOO_LONG         String longer than SIZE_MAX - 4.
+ * @retval QCBOR_ERR_HALF_PRECISION_DISABLED Half-precision in input, but decode
+ *                                           of half-precision disabled
+ * @retval QCBOR_ERR_ALL_FLOAT_DISABLED      Float-point in input, but all
+ *                                           float decode is disabled.
+ * @retval QCBOR_ERR_BAD_TYPE_7              Not-allowed representation of
+ *                                           simple type in input.
+ * @retval QCBOR_ERR_INDEF_LEN_ARRAYS_DISABLED  Indefinite length map/array
+ *                                              in input, but indefinite
+ *                                              lengths disabled.
+ * @retval QCBOR_ERR_NO_STRING_ALLOCATOR     Indefinite-length string in input,
+ *                                           but no string allocator.
+ * @retval QCBOR_ERR_INDEFINITE_STRING_CHUNK  Error in indefinite-length string.
+ * @retval QCBOR_ERR_INDEF_LEN_STRINGS_DISABLED  Indefinite-length string in
+ *                                               input, but indefinite-length
+ *                                               strings are disabled.
+ * @retval QCBOR_ERR_TOO_MANY_TAGS           Too many tag numbers on item.
+ * @retval QCBOR_ERR_ARRAY_DECODE_TOO_LONG   Too many items in array.
+ * @retval QCBOR_ERR_MAP_LABEL_TYPE          Map label not string or integer.
+ * @retval QCBOR_ERR_NO_MORE_ITEMS           Need more items for map or array.
+ * @retval QCBOR_ERR_BAD_BREAK               Indefinite-length break in wrong
+ *                                           place.
+ * @retval QCBOR_ERR_ARRAY_DECODE_NESTING_TOO_DEEP  Nesting deeper than QCBOR
+ *                                                  can handle.
  *
  * This handles the traversal descending into and asecnding out of
  * maps, arrays and bstr-wrapped CBOR. It figures out the ends of
@@ -2029,10 +2076,13 @@
  *
  * pDecodedItem[in,out]  The data item to convert.
  *
- * @retval QCBOR_ERR_DATE_OVERFLOW
- * @retval QCBOR_ERR_FLOAT_DATE_DISABLED
- * @retval QCBOR_ERR_ALL_FLOAT_DISABLED
- * @retval QCBOR_ERR_UNRECOVERABLE_TAG_CONTENT
+ * @retval QCBOR_ERR_DATE_OVERFLOW              65-bit negative integer.
+ * @retval QCBOR_ERR_FLOAT_DATE_DISABLED        Float-point date in input,
+ *                                              floating-point date disabled.
+ * @retval QCBOR_ERR_ALL_FLOAT_DISABLED         Float-point date in input,
+ *                                              all floating-point disabled.
+ * @retval QCBOR_ERR_UNRECOVERABLE_TAG_CONTENT  Unexpected and unrecoverable
+ *                                              error decoding date.
  *
  * The epoch date tag defined in QCBOR allows for floating-point
  * dates. It even allows a protocol to flop between date formats when
@@ -2138,10 +2188,13 @@
  *
  * pDecodedItem[in,out]  The data item to convert.
  *
- * @retval QCBOR_ERR_DATE_OVERFLOW
- * @retval QCBOR_ERR_FLOAT_DATE_DISABLED
- * @retval QCBOR_ERR_ALL_FLOAT_DISABLED
- * @retval QCBOR_ERR_UNRECOVERABLE_TAG_CONTENT
+ * @retval QCBOR_ERR_DATE_OVERFLOW              65-bit negative integer.
+ * @retval QCBOR_ERR_FLOAT_DATE_DISABLED        Float-point date in input,
+ *                                              floating-point date disabled.
+ * @retval QCBOR_ERR_ALL_FLOAT_DISABLED         Float-point date in input,
+ *                                              all floating-point disabled.
+ * @retval QCBOR_ERR_UNRECOVERABLE_TAG_CONTENT  Unexpected and unrecoverable
+ *                                              error decoding date.
  *
  * This is much simpler than the other epoch date format because
  * floating-porint is not allowed. This is mostly a simple type check.
