File 1192-inets-replace-size-1-by-xxx_size-1.patch of Package erlang
From dd66ae99fcd3e88d00298b2ffd493f4b04799a36 Mon Sep 17 00:00:00 2001
From: Kiko Fernandez-Reyes <kiko@erlang.org>
Date: Wed, 1 Feb 2023 15:33:41 +0100
Subject: [PATCH] inets: replace size/1 by xxx_size/1
The <c>size/1</c> BIF is not optimized by the JIT, and its use can
result in worse types for Dialyzer.
When one knows that the value being tested must be a tuple,
<c>tuple_size/1</c> should always be preferred.
When one knows that the value being tested must be a binary,
<c>byte_size/1</c> should be preferred. However, <c>byte_size/1</c> also
accepts a bitstring (rounding up size to a whole number of bytes), so
one must make sure that the call to <c>byte_size/</c> is preceded by a
call to <c>is_binary/1</c> to ensure that bitstrings are rejected. Note
that the compiler removes redundant calls to <c>is_binary/1</c>, so if
one is not sure whether previous code had made sure that the argument is
a binary, it does not harm to add an <c>is_binary/1</c> test immediately
before the call to <c>byte_size/1</c>.
---
lib/inets/src/http_server/httpd_request_handler.erl | 4 ++--
lib/inets/src/http_server/httpd_util.erl | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/lib/inets/src/http_server/httpd_request_handler.erl b/lib/inets/src/http_server/httpd_request_handler.erl
index 9163225035..746a1cd4ba 100644
--- a/lib/inets/src/http_server/httpd_request_handler.erl
+++ b/lib/inets/src/http_server/httpd_request_handler.erl
@@ -369,8 +369,8 @@ handle_msg({{continue, Chunk}, Module, Function, Args}, #state{chunk = {_, CbSta
handle_msg({continue, Module, Function, Args}, #state{mod = ModData} = State) ->
setopts(ModData#mod.socket, ModData#mod.socket_type, [{active, once}]),
{noreply, State#state{mfa = {Module, Function, Args}}};
-handle_msg({last, Body}, #state{headers = Headers, chunk = {_, CbState}} = State) ->
- NewHeaders = Headers#http_request_h{'content-length' = integer_to_list(size(Body))},
+handle_msg({last, Body}, #state{headers = Headers, chunk = {_, CbState}} = State) when is_binary(Body) ->
+ NewHeaders = Headers#http_request_h{'content-length' = integer_to_list(byte_size(Body))},
handle_response(State#state{chunk = {last, CbState},
headers = NewHeaders,
body = Body});
diff --git a/lib/inets/src/http_server/httpd_util.erl b/lib/inets/src/http_server/httpd_util.erl
index 07fc553f70..0dd83c101f 100644
--- a/lib/inets/src/http_server/httpd_util.erl
+++ b/lib/inets/src/http_server/httpd_util.erl
@@ -412,7 +412,7 @@ flatlength(List) ->
flatlength([H|T],L) when is_list(H) ->
flatlength(H,flatlength(T,L));
flatlength([H|T],L) when is_binary(H) ->
- flatlength(T,L+size(H));
+ flatlength(T,L+byte_size(H));
flatlength([_H|T],L) ->
flatlength(T,L+1);
flatlength([],L) ->
--
2.35.3