diff --git a/library/ssl_tls13_client.c b/library/ssl_tls13_client.c
index 463821b..57a0b28 100644
--- a/library/ssl_tls13_client.c
+++ b/library/ssl_tls13_client.c
@@ -570,7 +570,7 @@
     uint16_t server_share_group, offered_group;
 
     /* server_share_group (2 bytes) */
-    MBEDTLS_SSL_CHK_BUF_PTR( p, end, 2);
+    MBEDTLS_SSL_CHK_BUF_READ_PTR( p, end, 2);
     server_share_group = MBEDTLS_GET_UINT16_BE( p, 0 );
     p += 2;
 
@@ -979,10 +979,10 @@
     const unsigned char *p = *buf;
     size_t recv_id_len;
 
-    MBEDTLS_SSL_CHK_BUF_PTR( p, end, 1 );
+    MBEDTLS_SSL_CHK_BUF_READ_PTR( p, end, 1 );
     recv_id_len = *p++ ;
 
-    MBEDTLS_SSL_CHK_BUF_PTR( p, end, recv_id_len );
+    MBEDTLS_SSL_CHK_BUF_READ_PTR( p, end, recv_id_len );
 
     /* legacy_session_id_echo */
     if( ssl->session_negotiate->id_len != recv_id_len )
@@ -1042,13 +1042,12 @@
                                           const unsigned char *buf,
                                           const unsigned char *end )
 {
-
     int ret;
     const unsigned char *p = buf;
     size_t field_len; /* Length of field */
     const unsigned char *ext_end; /* Pointer to end of individual extension */
     uint16_t cipher_suite;
-    const mbedtls_ssl_ciphersuite_t* ciphersuite_info;
+    const mbedtls_ssl_ciphersuite_t *ciphersuite_info;
 
     /*
      * Check there is space for minimal fields
@@ -1059,14 +1058,7 @@
      * - cipher_suite               ( 2 bytes)
      * - legacy_compression_method  ( 1 byte )
      */
-    if( mbedtls_ssl_chk_buf_ptr( p, end, 38 ) != 0 )
-    {
-        MBEDTLS_SSL_DEBUG_MSG( 1,
-            ( "bad server hello message - min size not reached" ) );
-        MBEDTLS_SSL_PEND_FATAL_ALERT( MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR,
-                                      MBEDTLS_ERR_SSL_DECODE_ERROR );
-        return( MBEDTLS_ERR_SSL_DECODE_ERROR );
-    }
+    MBEDTLS_SSL_CHK_BUF_READ_PTR( p, end, 38 );
 
     MBEDTLS_SSL_DEBUG_BUF( 4, "server hello", p, end - p );
 
@@ -1106,7 +1098,7 @@
 
     /* Read server-selected ciphersuite,
        Check if there is space for cipher_suite. */
-    MBEDTLS_SSL_CHK_BUF_PTR( p, end, 2);
+    MBEDTLS_SSL_CHK_BUF_READ_PTR( p, end, 2);
     cipher_suite = MBEDTLS_GET_UINT16_BE( p, 0 );
     p += 2;
 
@@ -1153,7 +1145,7 @@
      *
      * legacy_compression_method == 0 ( 1 byte)
      */
-    MBEDTLS_SSL_CHK_BUF_PTR( p, end, 1 );
+    MBEDTLS_SSL_CHK_BUF_READ_PTR( p, end, 1 );
     if( p[0] != 0 )
     {
         MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server hello message" ) );
@@ -1164,26 +1156,13 @@
     p++;
 
     /* Check there is space fore extensions_length */
-    if( mbedtls_ssl_chk_buf_ptr( p, end, 2 ) != 0 )
-    {
-        MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server hello message" ) );
-        MBEDTLS_SSL_PEND_FATAL_ALERT( MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR,
-                                      MBEDTLS_ERR_SSL_DECODE_ERROR );
-        return( MBEDTLS_ERR_SSL_DECODE_ERROR );
-    }
-
+    MBEDTLS_SSL_CHK_BUF_READ_PTR( p, end, 2 );
     /* Get length of extensions field (2 bytes)*/
-    MBEDTLS_SSL_CHK_BUF_PTR( p, end, 2 );
     field_len = MBEDTLS_GET_UINT16_BE( p, 0 );
     p += 2;
+
     /* Check there is space for extensions_data */
-    if( mbedtls_ssl_chk_buf_ptr( p, end, field_len ) != 0 )
-    {
-        MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server hello message" ) );
-        MBEDTLS_SSL_PEND_FATAL_ALERT( MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR,
-                                      MBEDTLS_ERR_SSL_DECODE_ERROR );
-        return( MBEDTLS_ERR_SSL_DECODE_ERROR );
-    }
+    MBEDTLS_SSL_CHK_BUF_READ_PTR( p, end, field_len );
     /* Set end of extensions */
     ext_end = p + field_len;
 
@@ -1209,18 +1188,12 @@
          * extension_type           (2 bytes)
          * extension_data_length    (2 bytes)
          */
-        MBEDTLS_SSL_CHK_BUF_PTR( p, ext_end, 4 );
+        MBEDTLS_SSL_CHK_BUF_READ_PTR( p, ext_end, 4 );
         extension_type = MBEDTLS_GET_UINT16_BE( p, 0 );
         extension_data_len = MBEDTLS_GET_UINT16_BE( p, 2 );
         p += 4;
 
-        if( mbedtls_ssl_chk_buf_ptr( p, ext_end, extension_data_len ) != 0 )
-        {
-            MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server hello message" ) );
-            MBEDTLS_SSL_PEND_FATAL_ALERT( MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR,
-                                          MBEDTLS_ERR_SSL_DECODE_ERROR );
-            return( MBEDTLS_ERR_SSL_DECODE_ERROR );
-        }
+        MBEDTLS_SSL_CHK_BUF_READ_PTR( p, ext_end, extension_data_len );
 
         switch( extension_type )
         {
@@ -1393,7 +1366,6 @@
     ssl->major_ver = MBEDTLS_SSL_MAJOR_VERSION_3;
     ssl->handshake->extensions_present = MBEDTLS_SSL_EXT_NONE;
 
-
     ret = ssl_server_hello_coordinate( ssl, &buf, &buf_len );
     /* Parsing step
      * We know what message to expect by now and call
