File 2835-jinterface-Avoid-0-creation-value.patch of Package erlang

From 80090b80a48f01243c8de41709d4caa5fe4d463d Mon Sep 17 00:00:00 2001
From: Sverker Eriksson <sverker@erlang.org>
Date: Tue, 2 Nov 2021 19:42:12 +0100
Subject: [PATCH 5/8] jinterface: Avoid 0-creation value

---
 .../ericsson/otp/erlang/AbstractConnection.java    | 14 +++++++-------
 .../com/ericsson/otp/erlang/AbstractNode.java      |  9 ++++++++-
 .../java_src/com/ericsson/otp/erlang/OtpEpmd.java  |  2 +-
 .../com/ericsson/otp/erlang/OtpErlangPid.java      |  5 ++---
 .../com/ericsson/otp/erlang/OtpErlangPort.java     |  4 ++--
 .../com/ericsson/otp/erlang/OtpErlangRef.java      |  7 +++----
 .../com/ericsson/otp/erlang/OtpLocalNode.java      |  6 +++---
 7 files changed, 26 insertions(+), 21 deletions(-)

diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractConnection.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractConnection.java
index db56478667..75b538f085 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractConnection.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractConnection.java
@@ -1062,7 +1062,7 @@ public abstract class AbstractConnection extends Thread {
                         + port);
             }
             final int send_name_tag = sendName(peer.distChoose, localNode.flags,
-                                               localNode.creation);
+                                               localNode.creation());
             recvStatus();
             final int her_challenge = recvChallenge();
             final byte[] our_digest = genDigest(her_challenge,
@@ -1187,14 +1187,14 @@ public abstract class AbstractConnection extends Thread {
             obuf.write1('c');
             final int flagsHigh = (int)(localNode.flags >> 32);
             obuf.write4BE(flagsHigh);
-            obuf.write4BE(localNode.creation);
+            obuf.write4BE(localNode.creation());
 
             obuf.writeToAndFlush(socket.getOutputStream());
 
             if (traceLevel >= handshakeThreshold) {
                 System.out.println("-> " + "HANDSHAKE sendComplement" +
                                    " flagsHigh=" + flagsHigh +
-                                   " creation=" + localNode.creation);
+                                   " creation=" + localNode.creation());
             }
         }
     }
@@ -1218,7 +1218,7 @@ public abstract class AbstractConnection extends Thread {
             obuf.write1('N');
             obuf.write8BE(our_flags);
             obuf.write4BE(challenge);
-            obuf.write4BE(localNode.creation);
+            obuf.write4BE(localNode.creation());
             obuf.write2BE(str.length());
             obuf.write(str.getBytes());
         }
@@ -1273,7 +1273,7 @@ public abstract class AbstractConnection extends Thread {
                 apeer.flags = ibuf.read8BE();
                 if ((apeer.flags & AbstractNode.dFlagHandshake23) == 0)
                     throw new IOException("Missing DFLAG_HANDSHAKE_23");
-                apeer.creation = ibuf.read4BE();
+                apeer.setCreation(ibuf.read4BE());
                 int namelen = ibuf.read2BE();
                 tmpname = new byte[namelen];
                 ibuf.readN(tmpname);
@@ -1334,7 +1334,7 @@ public abstract class AbstractConnection extends Thread {
                 if ((peer.flags & AbstractNode.dFlagHandshake23) == 0)
                     throw new IOException("New challenge missing DFLAG_HANDHAKE_23");
                 challenge = ibuf.read4BE();
-                peer.creation = ibuf.read4BE();
+                peer.setCreation(ibuf.read4BE());
                 namelen = ibuf.read2BE();
                 break;
             default:
@@ -1383,7 +1383,7 @@ public abstract class AbstractConnection extends Thread {
 
                 final long flagsHigh = ibuf.read4BE();
                 peer.flags |= flagsHigh << 32;
-                peer.creation = ibuf.read4BE();
+                peer.setCreation(ibuf.read4BE());
 
             } catch (final OtpErlangDecodeException e) {
                 throw new IOException("Handshake failed - not enough data");
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractNode.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractNode.java
index 13ee63cb42..3955da5d83 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractNode.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractNode.java
@@ -118,7 +118,7 @@ public class AbstractNode implements OtpTransportFactory {
     int proto = 0; // tcp/ip
     int distHigh = 6;
     int distLow = 5; // Cannot talk to nodes before R6
-    int creation = 0;
+    private int creation = 0x710000;
     long flags = dFlagExtendedReferences | dFlagExtendedPidsPorts
             | dFlagBitBinaries | dFlagNewFloats | dFlagFunTags
             | dflagNewFunTags | dFlagUtf8Atoms | dFlagMapTag
@@ -285,6 +285,13 @@ public class AbstractNode implements OtpTransportFactory {
         return creation;
     }
 
+	void setCreation(int cr) throws OtpErlangDecodeException {
+		if (cr == 0) {
+			throw new OtpErlangDecodeException("Node creation 0 not allowed");
+		}
+		this.creation = cr;
+	}
+
     /**
      * Set the authorization cookie used by this node.
      *
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpEpmd.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpEpmd.java
index 008ee9727e..fc0dc8827c 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpEpmd.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpEpmd.java
@@ -326,7 +326,7 @@ public class OtpEpmd {
             if (response == ALIVE2_RESP || response == ALIVE2_X_RESP) {
                 final int result = ibuf.read1();
                 if (result == 0) {
-                    node.creation = (response == ALIVE2_RESP
+                    node.setCreation(response == ALIVE2_RESP
                                      ? ibuf.read2BE() : ibuf.read4BE());
                     if (traceLevel >= traceThreshold) {
                         System.out.println("<- OK");
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangPid.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangPid.java
index 3abdf9535f..0cab076227 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangPid.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangPid.java
@@ -85,12 +85,11 @@ public class OtpErlangPid extends OtpErlangObject implements Comparable<Object>
      *            used.
      *
      * @param creation
-     *            yet another arbitrary number. Ony the low order 2 bits will
-     *            be used.
+	 *  		  node incarnation number. Avoid values 0 to 3.
      */
     public OtpErlangPid(final String node, final int id, final int serial,
 			final int creation) {
-	this(OtpExternal.pidTag, node, id, serial, creation);
+		this(OtpExternal.newPidTag, node, id, serial, creation);
     }
 
     /**
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangPort.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangPort.java
index 320603494a..476addb086 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangPort.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangPort.java
@@ -77,10 +77,10 @@ public class OtpErlangPort extends OtpErlangObject {
      *            an arbitrary number. Only the low order 28 bits will be used.
      *
      * @param creation
-     *            another arbitrary number. Only the low order 2 bits will be used.
+	 *  		  node incarnation number. Avoid values 0 to 3.
      */
     public OtpErlangPort(final String node, final long id, final int creation) {
-        this(OtpExternal.portTag, node, id, creation);
+		this(OtpExternal.newPortTag, node, id, creation);
     }
 
     /**
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangRef.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangRef.java
index ce52d0c395..6fba5dd4a2 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangRef.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangRef.java
@@ -106,12 +106,11 @@ public class OtpErlangRef extends OtpErlangObject {
      *            three numbers will be read from the array.
      *
      * @param creation
-     *            another arbitrary number. Only the low order 2 bits will be
-     *            used.
+	 *  		  node incarnation number. Avoid values 0 to 3.
      */
     public OtpErlangRef(final String node, final int[] ids, final int creation) {
-	this(OtpExternal.newRefTag, node, ids, creation);
-    }
+		this(OtpExternal.newerRefTag, node, ids, creation);
+	}
 
     /**
      * Create a new(er) style Erlang ref from its components.
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpLocalNode.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpLocalNode.java
index 6f896aab9f..9f2587e7a2 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpLocalNode.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpLocalNode.java
@@ -114,7 +114,7 @@ public class OtpLocalNode extends AbstractNode {
      */
     public synchronized OtpErlangPid createPid() {
         final OtpErlangPid p = new OtpErlangPid(node, pidCount, serial,
-                creation);
+                creation());
 
         pidCount++;
         if (pidCount > 0x7fff) {
@@ -139,7 +139,7 @@ public class OtpLocalNode extends AbstractNode {
      * @return an Erlang port.
      */
     public synchronized OtpErlangPort createPort() {
-        final OtpErlangPort p = new OtpErlangPort(node, portCount, creation);
+        final OtpErlangPort p = new OtpErlangPort(node, portCount, creation());
 
         portCount++;
         if (portCount > 0xfffffff) { /* 28 bits */
@@ -158,7 +158,7 @@ public class OtpLocalNode extends AbstractNode {
      * @return an Erlang reference.
      */
     public synchronized OtpErlangRef createRef() {
-        final OtpErlangRef r = new OtpErlangRef(node, refId, creation);
+        final OtpErlangRef r = new OtpErlangRef(node, refId, creation());
 
         // increment ref ids (3 ints: 18 + 32 + 32 bits)
         refId[0]++;
-- 
2.31.1

openSUSE Build Service is sponsored by