Uploaded image for project: 'Axis2-C'
  1. Axis2-C
  2. AXIS2C-1486

ADB generated code generates memory leak

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Minor
    • Resolution: Unresolved
    • 1.4.1
    • 1.7.0
    • code generation
    • Win32

    Description

      The xslt used for transforming to C Code (CADBBeanTemplateSource.xsl) creates a memory leak:

      Code created for adb_..._serialize(..) contains a memory leak for the following types:

      • axutil_date_time_t
      • axutil_base64_binary_t

      The XSLT uses axutil_base64_binary_get_encoded_binary() and axutil_date_time_serialize_date_time() for creating
      textual representations. After writing these texts to the stream the start and end tags are freed but the
      the generated code never releases the base64 text or data_time text:

      Look at the follown snippet from the trunk version of the XSLT:
      (starting at Line: 4435)
      <xsl:when test="$nativePropertyType='axutil_date_time_t*'">
      text_value_<xsl:value-of select="$position"/> = axutil_date_time_serialize_date_time(<xsl:value-of select="$propertyInstanceName"/>, env);
      <xsl:if test="$anon or $istype">
      axutil_stream_write(stream, env, start_input_str, start_input_str_len);
      </xsl:if>
      axutil_stream_write(stream, env, text_value_<xsl:value-of select="$position"/>, axutil_strlen(text_value_<xsl:value-of select="$position"/>));
      --> MISSING FREE AT THIS POSITION: AXIS2_FREE(env>allocator, text_value_<xsl:value-of select="$position"/>);
      <xsl:if test="$anon or $istype">
      axutil_stream_write(stream, env, end_input_str, end_input_str_len);
      </xsl:if>
      </xsl:when>

      And starting at line: 4446
      <xsl:when test="$propertyType='axutil_base64_binary_t*'">
      text_value_<xsl:value-of select="$position"/> =axutil_base64_binary_get_encoded_binary(<xsl:value-of select="$propertyInstanceName"/>, env);
      <xsl:if test="$anon or $istype">
      axutil_stream_write(stream, env, start_input_str, start_input_str_len);
      </xsl:if>
      axutil_stream_write(stream, env, text_value_<xsl:value-of select="$position"/>, axutil_strlen(text_value_<xsl:value-of select="$position"/>)); ---> MISSING FREE HERE: AXIS2_FREE(env>allocator, text_value_<xsl:value-of select="$position"/>);
      <xsl:if test="$anon or $istype">
      axutil_stream_write(stream, env, end_input_str, end_input_str_len);
      </xsl:if>
      </xsl:when>

      Patch for trunk is included as DIFF file ( this also contains a fix for compiling with Visual Studio C Compiler)

      Attachments

        Activity

          People

            Unassigned Unassigned
            miwi238 Mirko Wischer
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated: