Bug #77468 [Asn]: zend_mm_heap corrupted

From: Date: Wed, 24 Jul 2019 09:07:31 +0000
Subject: Bug #77468 [Asn]: zend_mm_heap corrupted
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-221916@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=77468&edit=1

 ID:                 77468
 Updated by:         cmb@php.net
 Reported by:        thomas dot wiedmann at laek-bw dot de
 Summary:            zend_mm_heap corrupted
 Status:             Assigned
 Type:               Bug
 Package:            PDO OCI
 Operating System:   Windows 7 (Win64)
 PHP Version:        7.3.1
 Assigned To:        sixd
 Block user comment: N
 Private report:     N

 New Comment:

> I am not sure in which PHP version this error is fixed.

Since this ticket has not been closed, the bug is not fixed yet.


Previous Comments:
------------------------------------------------------------------------
[2019-07-24 08:34:19] thomas dot wiedmann at laek-bw dot de

I am not sure in which PHP version this error is fixed. Am I waiting for 7.4 ?
Thanks!

------------------------------------------------------------------------
[2019-01-21 09:44:22] thomas dot wiedmann at laek-bw dot de

Forth piece 

----[PL/SQL Package Body]----
CREATE OR REPLACE PACKAGE BODY tw_pkg_bearbeiter
IS

 /**
 * Globale Variablen für Tabelle: BEARBEITER 
 */ 
 g_nBearbeiter bearbeiter.bearbeiter%TYPE;
 g_sArt bearbeiter.art%TYPE;
 g_nZahl bearbeiter.zahl%TYPE;
 g_sText bearbeiter.text%TYPE;

 /**
 * Verarbeitungsstatus
 */
 g_nStatus NUMBER := 0;
 g_nEOF NUMBER := 0;
 error_code NUMBER := SQLCODE;
 error_msg VARCHAR2(512) := SQLERRM;
 
 CURSOR curBearbeiterRead(p_nBearbeiter NUMBER, p_sArt VARCHAR2 ) IS
 SELECT 
   bearbeiter, 
   art, 
   zahl, 
   text
  FROM bearbeiter
 WHERE bearbeiter = p_nBearbeiter
   AND art = p_sArt;
  
 recBearbeiterRead curBearbeiterRead%ROWTYPE;  
 
 /**
 * globale Variable zu BEARBEITER initialisieren
 */
 PROCEDURE Init
 IS
 BEGIN
  
  g_nBearbeiter := NULL;
  g_sArt := NULL;
  g_nZahl := NULL;
  g_sText := NULL;
  
 END;

 
 /**
 * Datensatz direkt lesen
 */
 PROCEDURE Read (p_nBearbeiter IN  NUMBER, p_sArt IN  VARCHAR2 )
 IS
 BEGIN
  /**
  * INIT
  */
  Init();
  
  
  OPEN curBearbeiterRead(p_nBearbeiter, p_sArt);
  LOOP
   FETCH curBearbeiterRead INTO recBearbeiterRead;
   EXIT WHEN curBearbeiterRead%NOTFOUND;
   /**
   * Datensatz in globale Variablen einlesen
   */
   g_nBearbeiter := recBearbeiterRead.bearbeiter;
   g_sArt := recBearbeiterRead.art;
   g_nZahl := recBearbeiterRead.zahl;
   g_sText := recBearbeiterRead.text;
   
   EXIT;
  END LOOP;
  IF curBearbeiterRead%FOUND THEN
   g_nStatus := 1;
  ELSE 
   g_nStatus := 0;  
  END IF;
  CLOSE curBearbeiterRead;  
 END; 

 
 PROCEDURE Close 
 IS 
 BEGIN 
   IF curBearbeiterRead%ISOPEN THEN
    CLOSE curBearbeiterRead;
   END IF;  

   IF curBearbeiterSearch%ISOPEN THEN
    CLOSE curBearbeiterSearch;
   END IF;     
 END;
 
 
 /**
 * PRIVAT FUNCTION - nicht in Spezifikation
 * Prüfen auf zwischenzeitliche Änderung (multiuser) und Sperren für UPDATE
 */

 
 /**
 * Status - Get - Variablen
 */ 
 PROCEDURE GetnStatus (p_nStatus OUT NUMBER)
 IS
 BEGIN
  p_nStatus :=  g_nStatus;
 END;     
 PROCEDURE GetnErrorcode (p_error_code OUT NUMBER)
 IS
 BEGIN
  p_error_code :=  error_code;
 END;     
 PROCEDURE GetsErrormsg (p_error_msg OUT VARCHAR2)
 IS
 BEGIN
  p_error_msg :=  error_msg;
 END;     
 
    
 /**
 * SET/GET Methoden 
 */ 
 PROCEDURE GetnBearbeiter ( p_nBearbeiter OUT  NUMBER  )
 IS 
 BEGIN 
  p_nBearbeiter :=  g_nBearbeiter;
 END; 
 PROCEDURE SetnBearbeiter ( p_nBearbeiter IN  NUMBER  )
 IS 
 BEGIN 
  g_nBearbeiter :=  p_nBearbeiter;
 END; 
 PROCEDURE GetsArt ( p_sArt OUT  VARCHAR2  )
 IS 
 BEGIN 
  p_sArt :=  g_sArt;
 END; 
 PROCEDURE SetsArt ( p_sArt IN  VARCHAR2  )
 IS 
 BEGIN 
  g_sArt :=  p_sArt;
 END; 
 PROCEDURE GetnZahl ( p_nZahl OUT  NUMBER  )
 IS 
 BEGIN 
  p_nZahl :=  g_nZahl;
 END; 
 PROCEDURE SetnZahl ( p_nZahl IN  NUMBER  )
 IS 
 BEGIN 
  g_nZahl :=  p_nZahl;
 END; 
 PROCEDURE GetsText ( p_sText OUT  VARCHAR2  )
 IS 
 BEGIN 
  p_sText :=  g_sText;
 END; 
 PROCEDURE SetsText ( p_sText IN  VARCHAR2  )
 IS 
 BEGIN 
  g_sText :=  p_sText;
 END; 
 
 /**
 * wenn in Zahl ein Julianisches Datum hinterlegt ist, 
 * dieses im Format DD.MM.YYYY abholen/setzen
 */ 
 PROCEDURE GetdtZahl ( p_dtZahl OUT VARCHAR2  )
 IS 
 BEGIN 
  p_dtZahl :=  TO_CHAR(TO_DATE(g_nZahl,'J'),'DD.MM.YYYY');
 END; 
 PROCEDURE SetdtZahl ( p_dtZahl IN VARCHAR2 )
 IS 
 BEGIN 
  g_nZahl :=   TO_NUMBER(TO_CHAR(TO_DATE(p_dtZahl,'DD.MM.YYYY'),'J'));
 END;  
 
 
 
BEGIN
 NULL;
 EXCEPTION
  WHEN others THEN 
   error_code := SQLCODE;
   error_msg := SQLERRM;
END;


----[PL/SQL Package Body]----

------------------------------------------------------------------------
[2019-01-21 09:41:59] thomas dot wiedmann at laek-bw dot de

Third piece

----[PL/SQL Package]----
CREATE OR REPLACE PACKAGE tw_pkg_bearbeiter
 AUTHID CURRENT_USER
IS 
 
 /**
 * Hauptmethoden
 */
 PROCEDURE Read (p_nBearbeiter IN  NUMBER := NULL, p_sArt IN  VARCHAR2 := NULL); 
 

 /**
 * GET/SET
 */
 PROCEDURE GetnBearbeiter ( p_nBearbeiter OUT  NUMBER  );
 PROCEDURE SetnBearbeiter ( p_nBearbeiter IN  NUMBER  := NULL );
 PROCEDURE GetsArt ( p_sArt OUT  VARCHAR2  );
 PROCEDURE SetsArt ( p_sArt IN  VARCHAR2  := NULL );
 PROCEDURE GetnZahl ( p_nZahl OUT  NUMBER  );
 PROCEDURE SetnZahl ( p_nZahl IN  NUMBER  := NULL );
 PROCEDURE GetsText ( p_sText OUT  VARCHAR2  );
 PROCEDURE SetsText ( p_sText IN  VARCHAR2  := NULL );
 
 PROCEDURE GetdtZahl ( p_dtZahl OUT VARCHAR2  );
 PROCEDURE SetdtZahl ( p_dtZahl IN  VARCHAR2  := NULL ); 
 
END;
----[PL/SQL Package]----

------------------------------------------------------------------------
[2019-01-21 09:40:34] thomas dot wiedmann at laek-bw dot de

Second piece


After the second stmt=null apache crashed
----[php PL/SQL call]---
$sQuery = '';
$sQuery = $sQuery . 'BEGIN ';
$sQuery = $sQuery . ' tw_pkg_bearbeiter.Read(:df_nBearbeiter,:df_sArt); ';   
$sQuery = $sQuery . ' tw_pkg_bearbeiter.GetnBearbeiter(:df_nBearbeiter);';
$sQuery = $sQuery . ' tw_pkg_bearbeiter.GetsArt(:df_sArt);';
$sQuery = $sQuery . ' tw_pkg_bearbeiter.GetnZahl(:df_nZahl);';
$sQuery = $sQuery . ' tw_pkg_bearbeiter.GetsText(:df_sText);';
$sQuery = $sQuery . ' tw_pkg_bearbeiter.GetdtZahl(:df_dtZahl);';         
$sQuery = $sQuery . ' tw_pkg_bearbeiter.GetnStatus(:nStatus); ';                    
$sQuery = $sQuery . 'END; ';          
 
$stmt = $dbh->prepare($sQuery);
if ($stmt) { 

 error_log('bearbeiter read() - prepared', 0); 

 $stmt->bindParam(':df_nBearbeiter', $df_nBearbeiter, PDO::PARAM_INT |
PDO::PARAM_INPUT_OUTPUT, 22 );
 $stmt->bindParam(':df_sArt', $df_sArt, PDO::PARAM_STR | PDO::PARAM_INPUT_OUTPUT, 15 );
 $stmt->bindParam(':df_nZahl', $df_nZahl, PDO::PARAM_INT | PDO::PARAM_INPUT_OUTPUT, 22
);
 $stmt->bindParam(':df_sText', $df_sText, PDO::PARAM_STR | PDO::PARAM_INPUT_OUTPUT, 40
);          
 $stmt->bindParam(':df_dtZahl', $df_dtZahl, PDO::PARAM_STR | PDO::PARAM_INPUT_OUTPUT,
10 );
 $stmt->bindParam(':nStatus', $nStatus, PDO::PARAM_INT | PDO::PARAM_INPUT_OUTPUT, 22 );
      

 $stmt->execute();
 
 error_log('bearbeiter read() - executed', 0); 
 
 $stmt->closeCursor();       
 
 error_log('bearbeiter read() - closeCursor', 0); 
 
 $stmt = null;               
 
 error_log('bearbeiter read() - stmt=null', 0); 
 
 if ($nStatus) {
  // ok     
 } else {
  // nicht gefunden @todo - Fehlermeldung?
 }  
}
----[php PL/SQL call]---

------------------------------------------------------------------------
[2019-01-21 09:38:43] thomas dot wiedmann at laek-bw dot de

I get the restart after doing the same PL/SQL more then two times. Logging same
"error_log" notes. It's look like this

-----[Process]---
read() - start
read() - prepared
read() - executed
read() - closeCursor
read() - stmt=null
read() - start
read() - prepared
read() - executed
read() - closeCursor
read() - stmt=null
zend_mm_heap corrupted
restarting
-----[Process]---

Sorry: get message: Your comment looks like SPAM by its content. Please consider rewording.

So I will send more then one feedback

------------------------------------------------------------------------


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=77468


--
Edit this bug report at https://bugs.php.net/bug.php?id=77468&edit=1


Thread (15 messages)

« previous php.bugs (#221916) next »