diff --git a/res/res_http_websocket.c b/res/res_http_websocket.c
index 84138234ebffd89de0329f54e16adb8d41da2851..799eb848fad35308ae2b538555a5e609f1d79d0b 100644
--- a/res/res_http_websocket.c
+++ b/res/res_http_websocket.c
@@ -529,10 +529,12 @@ static inline int ws_safe_read(struct ast_websocket *session, char *buf, int len
 				return -1;
 			}
 		}
-		xlen = xlen - rlen;
-		rbuf = rbuf + rlen;
-		if (!xlen) {
-			break;
+		if (rlen > 0) {
+			xlen = xlen - rlen;
+			rbuf = rbuf + rlen;
+			if (!xlen) {
+				break;
+			}
 		}
 		if (ast_wait_for_input(ast_iostream_get_fd(session->stream), 1000) < 0) {
 			ast_log(LOG_ERROR, "ast_wait_for_input returned err: %s\n", strerror(errno));