Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:24
erlang
0663-snmp-replace-size-1-by-xxx_size-1.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0663-snmp-replace-size-1-by-xxx_size-1.patch of Package erlang
From 4a5e5e489221fd40f7b119af66cb7a7895b1262e Mon Sep 17 00:00:00 2001 From: Kiko Fernandez-Reyes <kiko@erlang.org> Date: Thu, 2 Feb 2023 14:22:23 +0100 Subject: [PATCH] snmp: 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/snmp/src/agent/snmp_generic_mnesia.erl | 4 ++-- lib/snmp/src/agent/snmp_index.erl | 2 +- lib/snmp/src/agent/snmpa_local_db.erl | 2 +- lib/snmp/src/agent/snmpa_mib_data_ttln.erl | 16 ++++++++-------- lib/snmp/src/agent/snmpa_mib_data_tttn.erl | 16 ++++++++-------- lib/snmp/src/agent/snmpa_mpd.erl | 9 +++++---- lib/snmp/src/manager/snmpm_net_if.erl | 2 +- lib/snmp/src/misc/snmp_pdus.erl | 4 ++-- 8 files changed, 28 insertions(+), 27 deletions(-) diff --git a/lib/snmp/src/agent/snmp_generic_mnesia.erl b/lib/snmp/src/agent/snmp_generic_mnesia.erl index e2e8bba8c5..77e6190435 100644 --- a/lib/snmp/src/agent/snmp_generic_mnesia.erl +++ b/lib/snmp/src/agent/snmp_generic_mnesia.erl @@ -185,8 +185,8 @@ make_row2(RowList, 1) -> RowList; make_row2([_OtherIndex | RowList], N) -> make_row2(RowList, N-1). -make_row_list(Row) -> - make_row_list(size(Row), Row, []). +make_row_list(Row) when is_tuple(Row) -> + make_row_list(tuple_size(Row), Row, []). make_row_list(N, Row, Acc) when N > 2 -> make_row_list(N-1, Row, [element(N, Row) | Acc]); make_row_list(2, Row, Acc) -> diff --git a/lib/snmp/src/agent/snmp_index.erl b/lib/snmp/src/agent/snmp_index.erl index 38b39a9b7e..cddb49bd7a 100644 --- a/lib/snmp/src/agent/snmp_index.erl +++ b/lib/snmp/src/agent/snmp_index.erl @@ -155,7 +155,7 @@ is_snmp_type(_) -> false. key_to_oid_i(Key, _Type) when is_integer(Key) -> [Key]; key_to_oid_i(Key, fix_string) -> Key; key_to_oid_i(Key, _Type) when is_list(Key) -> [length(Key) | Key]; -key_to_oid_i(Key, Types) -> keys_to_oid(size(Key), Key, [], Types). +key_to_oid_i(Key, Types) when is_tuple(Key) -> keys_to_oid(tuple_size(Key), Key, [], Types). keys_to_oid(0, _Key, Oid, _Types) -> Oid; keys_to_oid(N, Key, Oid, Types) -> diff --git a/lib/snmp/src/agent/snmpa_local_db.erl b/lib/snmp/src/agent/snmpa_local_db.erl index 63879f1acb..27af3c5498 100644 --- a/lib/snmp/src/agent/snmpa_local_db.erl +++ b/lib/snmp/src/agent/snmpa_local_db.erl @@ -1031,7 +1031,7 @@ table_get_elements(NameDb, RowIndex, Cols, _FirstOwnIndex) -> get_elements(_Cols, undefined) -> undefined; -get_elements([Col | Cols], Row) when is_tuple(Row) and (size(Row) >= Col) -> +get_elements([Col | Cols], Row) when tuple_size(Row) >= Col -> [element(Col, Row) | get_elements(Cols, Row)]; get_elements([], _Row) -> []; diff --git a/lib/snmp/src/agent/snmpa_mib_data_ttln.erl b/lib/snmp/src/agent/snmpa_mib_data_ttln.erl index 0c39489852..bd5a9ea52a 100644 --- a/lib/snmp/src/agent/snmpa_mib_data_ttln.erl +++ b/lib/snmp/src/agent/snmpa_mib_data_ttln.erl @@ -777,10 +777,10 @@ next_node(_D, undefined_node, _Oid, _RevOidSoFar, _MibView) -> next_node(_D, {tree, Tree, {table_entry, _Id}}, [Int | _Oid], _RevOidSoFar, _MibView) - when Int+1 > size(Tree) -> + when Int+1 > tuple_size(Tree) -> ?vtrace("next_node(tree,table_entry) -> entry when not found within" "~n Int: ~p" - "~n size(Tree): ~p", [Int, size(Tree)]), + "~n size(Tree): ~p", [Int, tuple_size(Tree)]), false; next_node(D, {tree, Tree, {table_entry, _MibName}}, Oid, RevOidSoFar, MibView) -> @@ -788,7 +788,7 @@ next_node(D, {tree, Tree, {table_entry, _MibName}}, "~n size(Tree): ~p" "~n Oid: ~p" "~n RevOidSoFar: ~p" - "~n MibView: ~p", [size(Tree), Oid, RevOidSoFar, MibView]), + "~n MibView: ~p", [tuple_size(Tree), Oid, RevOidSoFar, MibView]), OidSoFar = lists:reverse(RevOidSoFar), case snmpa_acm:is_definitely_not_in_mib_view(OidSoFar, MibView) of true -> @@ -809,14 +809,14 @@ next_node(D, {tree, Tree, {table_entry, _MibName}}, end; next_node(D, {tree, Tree, _Info}, [Int | RestOfOid], RevOidSoFar, MibView) - when (Int < size(Tree)) andalso (Int >= 0) -> + when (Int < tuple_size(Tree)) andalso (Int >= 0) -> ?vtrace("next_node(tree) -> entry when" "~n size(Tree): ~p" "~n Int: ~p" "~n RestOfOid: ~p" "~n RevOidSoFar: ~p" "~n MibView: ~p", - [size(Tree), Int, RestOfOid, RevOidSoFar, MibView]), + [tuple_size(Tree), Int, RestOfOid, RevOidSoFar, MibView]), case next_node(D, element(Int+1,Tree), RestOfOid, [Int|RevOidSoFar], MibView) of false -> @@ -830,11 +830,11 @@ next_node(D, {tree, Tree, _Info}, [], RevOidSoFar, MibView) -> "~n size(Tree): ~p" "~n RevOidSoFar: ~p" "~n MibView: ~p", - [size(Tree), RevOidSoFar, MibView]), + [tuple_size(Tree), RevOidSoFar, MibView]), find_next(D, {tree, Tree, _Info}, 0, RevOidSoFar, MibView); next_node(_D, {tree, Tree, _Info}, _RestOfOid, _RevOidSoFar, _MibView) -> ?vtrace("next_node(tree) -> entry when" - "~n size(Tree): ~p", [size(Tree)]), + "~n size(Tree): ~p", [tuple_size(Tree)]), false; next_node(D, {node, subagent}, Oid, RevOidSoFar, MibView) -> @@ -896,7 +896,7 @@ next_node(_D, {node, {variable, _MibName}}, _Oid, _RevOidSoFar, _MibView) -> %% node. %%----------------------------------------------------------------- find_next(D, {tree, Tree, internal}, Idx, RevOidSoFar, MibView) - when Idx < size(Tree) -> + when Idx < tuple_size(Tree) -> case find_next(D, element(Idx+1, Tree), 0, [Idx| RevOidSoFar], MibView) of false -> find_next(D, {tree, Tree, internal}, Idx+1, RevOidSoFar, MibView); diff --git a/lib/snmp/src/agent/snmpa_mib_data_tttn.erl b/lib/snmp/src/agent/snmpa_mib_data_tttn.erl index b0d5312e2c..f626e50b6a 100644 --- a/lib/snmp/src/agent/snmpa_mib_data_tttn.erl +++ b/lib/snmp/src/agent/snmpa_mib_data_tttn.erl @@ -804,10 +804,10 @@ next_node(_D, undefined_node, _Oid, _RevOidSoFar, _MibView) -> next_node(_D, {tree, Tree, {table_entry, _Id}}, [Int | _Oid], _RevOidSoFar, _MibView) - when Int+1 > size(Tree) -> + when Int+1 > tuple_size(Tree) -> ?vtrace("next_node(tree,table_entry) -> entry when not found within" "~n Int: ~p" - "~n size(Tree): ~p", [Int, size(Tree)]), + "~n size(Tree): ~p", [Int, tuple_size(Tree)]), false; next_node(D, {tree, Tree, {table_entry, _MibName}}, Oid, RevOidSoFar, MibView) -> @@ -815,7 +815,7 @@ next_node(D, {tree, Tree, {table_entry, _MibName}}, "~n size(Tree): ~p" "~n Oid: ~p" "~n RevOidSoFar: ~p" - "~n MibView: ~p", [size(Tree), Oid, RevOidSoFar, MibView]), + "~n MibView: ~p", [tuple_size(Tree), Oid, RevOidSoFar, MibView]), OidSoFar = lists:reverse(RevOidSoFar), case snmpa_acm:is_definitely_not_in_mib_view(OidSoFar, MibView) of true -> @@ -836,14 +836,14 @@ next_node(D, {tree, Tree, {table_entry, _MibName}}, end; next_node(D, {tree, Tree, _Info}, [Int | RestOfOid], RevOidSoFar, MibView) - when (Int < size(Tree)) andalso (Int >= 0) -> + when (Int < tuple_size(Tree)) andalso (Int >= 0) -> ?vtrace("next_node(tree) -> entry when" "~n size(Tree): ~p" "~n Int: ~p" "~n RestOfOid: ~p" "~n RevOidSoFar: ~p" "~n MibView: ~p", - [size(Tree), Int, RestOfOid, RevOidSoFar, MibView]), + [tuple_size(Tree), Int, RestOfOid, RevOidSoFar, MibView]), case next_node(D, element(Int+1,Tree), RestOfOid, [Int|RevOidSoFar], MibView) of false -> @@ -857,11 +857,11 @@ next_node(D, {tree, Tree, _Info}, [], RevOidSoFar, MibView) -> "~n size(Tree): ~p" "~n RevOidSoFar: ~p" "~n MibView: ~p", - [size(Tree), RevOidSoFar, MibView]), + [tuple_size(Tree), RevOidSoFar, MibView]), find_next(D, {tree, Tree, _Info}, 0, RevOidSoFar, MibView); next_node(_D, {tree, Tree, _Info}, _RestOfOid, _RevOidSoFar, _MibView) -> ?vtrace("next_node(tree) -> entry when" - "~n size(Tree): ~p", [size(Tree)]), + "~n size(Tree): ~p", [tuple_size(Tree)]), false; next_node(D, {node, subagent}, Oid, RevOidSoFar, MibView) -> @@ -924,7 +924,7 @@ next_node(_D, {node, {variable, _MibName}}, _Oid, _RevOidSoFar, _MibView) -> %% node. %%----------------------------------------------------------------- find_next(D, {tree, Tree, internal}, Idx, RevOidSoFar, MibView) - when Idx < size(Tree) -> + when Idx < tuple_size(Tree) -> case find_next(D, element(Idx+1, Tree), 0, [Idx| RevOidSoFar], MibView) of false -> find_next(D, {tree, Tree, internal}, Idx+1, RevOidSoFar, MibView); diff --git a/lib/snmp/src/agent/snmpa_mpd.erl b/lib/snmp/src/agent/snmpa_mpd.erl index 248b8aa3aa..4c94ea9de7 100644 --- a/lib/snmp/src/agent/snmpa_mpd.erl +++ b/lib/snmp/src/agent/snmpa_mpd.erl @@ -673,7 +673,7 @@ generate_response_msg(Vsn, RePdu, Type, {discarded, Reason}; Packet -> MMS = get_engine_max_message_size(LocalEngineID), - case size(Packet) of + case byte_size(Packet) of Len when Len =< MMS -> Log(Type, Packet), inc_snmp_cnt_vars(Type, RePdu), @@ -742,7 +742,7 @@ generate_response_msg(Vsn, RePdu, Type, %% because of the calculation we do when we %% receive the bulk-request. Packet = list_to_binary(OutMsg), - case size(Packet) of + case byte_size(Packet) of Len when Len =< AgentMS -> if SecLevel =:= 3 -> @@ -932,7 +932,7 @@ generate_msg(Vsn, _NoteStore, Pdu, {community, Community}, LocalEngineID, To) -> {discarded, Reason}; Packet -> AgentMax = get_engine_max_message_size(LocalEngineID), - case size(Packet) of + case byte_size(Packet) of Len when Len =< AgentMax -> {ok, mk_v1_v2_packet_list(To, Packet, Len, Pdu)}; Len -> @@ -1321,7 +1321,7 @@ mk_v3_packet_entry(NoteStore, Domain, Addr, %% Store in cache for 150 sec. Packet = list_to_binary(OutMsg), ?vdebug("mk_v3_packet_entry -> generated: ~w bytes", - [size(Packet)]), + [byte_size(Packet)]), Data = if SecLevel =:= 3 -> @@ -1560,3 +1560,4 @@ user_err(F, A) -> config_err(F, A) -> snmpa_error:config_err(F, A). + diff --git a/lib/snmp/src/manager/snmpm_net_if.erl b/lib/snmp/src/manager/snmpm_net_if.erl index 7a7c8852a2..4153646e88 100644 --- a/lib/snmp/src/manager/snmpm_net_if.erl +++ b/lib/snmp/src/manager/snmpm_net_if.erl @@ -814,7 +814,7 @@ maybe_handle_recv_msg_mt( handle_recv_msg(Domain, Addr, Bytes, #state{server = Pid}) - when is_binary(Bytes) andalso (size(Bytes) =:= 0) -> + when is_binary(Bytes) andalso (byte_size(Bytes) =:= 0) -> Pid ! {snmp_error, {empty_message, Domain, Addr}, Domain, Addr}; %% handle_recv_msg( diff --git a/lib/snmp/src/misc/snmp_pdus.erl b/lib/snmp/src/misc/snmp_pdus.erl index 93f06749fd..d4f30a5c3b 100644 --- a/lib/snmp/src/misc/snmp_pdus.erl +++ b/lib/snmp/src/misc/snmp_pdus.erl @@ -828,8 +828,8 @@ enint(N, Acc) -> enc_oct_str_tag(OStr) when is_list(OStr) -> lists:append([4|elength(length(OStr))],OStr); -enc_oct_str_tag(OBin) -> - [4 | elength(size(OBin))] ++ binary_to_list(OBin). +enc_oct_str_tag(OBin) when is_binary(OBin) -> + [4 | elength(byte_size(OBin))] ++ binary_to_list(OBin). enc_oct_str_notag(OStr) -> OStr. -- 2.35.3
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor