Since now TDataStd_ExtStringArray::Value() returns a constant reference to the string value.
Also, a draw-command GetExtStringArray is modified to manipulate with the string by a constant reference.
Added test case bugs/caf/bug23912
     return 1;
   }
   
-  TCollection_ExtendedString anExtendedString;
-  TCollection_AsciiString anAsciiString;
   for(Standard_Integer i = A->Lower(); i<=A->Upper(); i++){
-    anExtendedString = A->Value(i);
-    anAsciiString = TCollection_AsciiString (A->Value(i),'?');
-    //cout << anAsciiString.ToCString() << endl;
+    const TCollection_ExtendedString& anExtendedString = A->Value(i);
+    TCollection_AsciiString anAsciiString(A->Value(i),'?');
     di << anAsciiString.ToCString();
     if(i<A->Upper())  
       di<<" ";
 
     Value (me; Index : Integer from Standard)
     ---Purpose: Returns the value of  the  <Index>th element of the array
     --
+    ---C++: return const &
     ---C++: alias operator ()
     returns ExtendedString from TCollection;
 
 
 
 
 //=======================================================================
-//function : GetValue
+//function : Value
 //purpose  : 
 //=======================================================================
 
-TCollection_ExtendedString TDataStd_ExtStringArray::Value (const Standard_Integer index) const 
+const TCollection_ExtendedString& TDataStd_ExtStringArray::Value (const Standard_Integer index) const 
 {
-  if(myValue.IsNull()) return TCollection_ExtendedString();
-  return myValue->Value(index); 
+    if (myValue.IsNull()) 
+    {
+        static TCollection_ExtendedString staticEmptyValue;
+        return staticEmptyValue;
+    }
+    return myValue->Value(index); 
 }
 
-
-
 //=======================================================================
 //function : Lower
 //purpose  : 
 
--- /dev/null
+puts "============"
+puts "OCC23912"
+puts "============"
+puts ""
+###################################################################################################################
+# TDataStd_ExtStringArray::Value() returns a copy of TCollection_ExtededString, but it might return a reference
+###################################################################################################################
+
+NewDocument D
+SetExtStringArray D 0:1 0 1 5 "A" "B" "C" "D" "E"
+set info [GetExtStringArray D 0:1]
+
+if { [regexp "A B C D E" $info] != 1 } {
+    puts "Error : function returns wrong value"
+} else {
+    puts "OK : function works properly"
+}
+
+
+
+
+
+
+