File 1766-Fix-snmp-config-when-run-from-Elixir.patch of Package erlang

From da41828f654e87475f0a4add905ab399bfb6a09d Mon Sep 17 00:00:00 2001
From: Michael Neumann <mneumann@ntecs.de>
Date: Sun, 26 Oct 2025 15:20:28 +0100
Subject: [PATCH] Fix snmp:config() when run from Elixir

A device read in Elixir returns a binary, not a char list (as in Erlang).

Quoting Jose Valim: "Any device may return a binary on read, therefore,
all Erlang/Elixir code needs to be aware of this possibility and handle
it accordingly."

See: https://github.com/elixir-lang/elixir/issues/14757

How to reproduce the bug:

```
~ % iex
Erlang/OTP 28 [erts-16.0.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [jit:ns]

Interactive Elixir (1.18.4) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> :snmp.config()

Simple SNMP configuration tool (version 5.19)
------------------------------------------------
Note: Non-trivial configurations still has to be
      done manually. IP addresses may be entered
      as dront.ericsson.se (UNIX only) or
      123.12.13.23
------------------------------------------------

y
{:error,
 {:function_clause,
  [
    {:lists, :delete, [10, "y\n"], [file: ~c"lists.erl", line: 725]},
    {:snmp_config, :ask, 3, [file: ~c"snmp_config.erl", line: 1683]},
    {:snmp_config, :snmp_agent2, 0, [file: ~c"snmp_config.erl", line: 173]},
    {:snmp_config, :config_agent, 0, [file: ~c"snmp_config.erl", line: 159]},
    {:snmp_config, :config2, 0, [file: ~c"snmp_config.erl", line: 130]},
    {:snmp_config, :config, 0, [file: ~c"snmp_config.erl", line: 117]},
    {:elixir, :eval_external_handler, 3, [file: ~c"src/elixir.erl", line: 386]},
    {:erl_eval, :do_apply, 7, [file: ~c"erl_eval.erl", line: 924]}
  ]}}
```
---
 lib/snmp/src/misc/snmp_config.erl | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/lib/snmp/src/misc/snmp_config.erl b/lib/snmp/src/misc/snmp_config.erl
index 231b1a20a4..9b1b2bb751 100644
--- a/lib/snmp/src/misc/snmp_config.erl
+++ b/lib/snmp/src/misc/snmp_config.erl
@@ -1678,7 +1678,7 @@ print_q(Q, Default) when is_list(Default) ->
 %% Defval = string() | mandatory
 ask(Q, Default, Verify) when is_list(Q) andalso is_function(Verify) ->
     print_q(Q, Default),
-    PrelAnsw = io:get_line(''),
+    PrelAnsw = conv_bin_to_list(io:get_line('')),
     Answer = 
 	case remove_newline(PrelAnsw) of
 	    "" when Default =/= mandatory -> Default;
@@ -1741,7 +1741,12 @@ guess_engine_name() ->
 % 	{_,_} -> "user_id"
 %     end.
 
-    
+% This is neccessary as in Elixir io:get_line returns a binary
+conv_bin_to_list(Bin) when is_binary(Bin) ->
+	binary:bin_to_list(Bin);
+conv_bin_to_list(Str) ->
+	Str.
+
 remove_newline(Str) -> 
     lists:delete($\n, Str).
 
-- 
2.51.0

openSUSE Build Service is sponsored by