LCOV - code coverage report
Current view: top level - libreoffice/workdir/unxlngi6.pro/UnpackedTarball/xmlsec/src - membuf.c (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 0 57 0.0 %
Date: 2012-12-17 Functions: 0 5 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /** 
       2             :  * XML Security Library (http://www.aleksey.com/xmlsec).
       3             :  *
       4             :  * Memory buffer transform
       5             :  *
       6             :  * This is free software; see Copyright file in the source
       7             :  * distribution for preciese wording.
       8             :  * 
       9             :  * Copyright (C) 2002-2003 Aleksey Sanin <aleksey@aleksey.com>
      10             :  */
      11             : #include "globals.h"
      12             : 
      13             : #include <stdlib.h>
      14             : #include <string.h>
      15             :  
      16             : #include <libxml/tree.h>
      17             : 
      18             : #include <xmlsec/xmlsec.h>
      19             : #include <xmlsec/buffer.h>
      20             : #include <xmlsec/keys.h>
      21             : #include <xmlsec/transforms.h>
      22             : #include <xmlsec/keys.h>
      23             : #include <xmlsec/base64.h>
      24             : #include <xmlsec/membuf.h>
      25             : #include <xmlsec/errors.h>
      26             : 
      27             : 
      28             : /*****************************************************************************
      29             :  *
      30             :  * Memory Buffer Transform
      31             :  * 
      32             :  * xmlSecBuffer is located after xmlSecTransform
      33             :  * 
      34             :  ****************************************************************************/
      35             : #define xmlSecTransformMemBufSize \
      36             :         (sizeof(xmlSecTransform) + sizeof(xmlSecBuffer))
      37             : #define xmlSecTransformMemBufGetBuf(transform) \
      38             :     ((xmlSecTransformCheckSize((transform), xmlSecTransformMemBufSize)) ? \
      39             :         (xmlSecBufferPtr)(((xmlSecByte*)(transform)) + sizeof(xmlSecTransform)) : \
      40             :         (xmlSecBufferPtr)NULL)
      41             : 
      42             : static int              xmlSecTransformMemBufInitialize         (xmlSecTransformPtr transform);
      43             : static void             xmlSecTransformMemBufFinalize           (xmlSecTransformPtr transform);
      44             : static int              xmlSecTransformMemBufExecute            (xmlSecTransformPtr transform, 
      45             :                                                                  int last,
      46             :                                                                  xmlSecTransformCtxPtr transformCtx);
      47             : static xmlSecTransformKlass xmlSecTransformMemBufKlass = {
      48             :     /* klass/object sizes */
      49             :     sizeof(xmlSecTransformKlass),               /* xmlSecSize klassSize */
      50             :     xmlSecTransformMemBufSize,                  /* xmlSecSize objSize */
      51             : 
      52             :     xmlSecNameMemBuf,                           /* const xmlChar* name; */
      53             :     NULL,                                       /* const xmlChar* href; */
      54             :     0,                                          /* xmlSecAlgorithmUsage usage; */
      55             : 
      56             :     xmlSecTransformMemBufInitialize,            /* xmlSecTransformInitializeMethod initialize; */
      57             :     xmlSecTransformMemBufFinalize,              /* xmlSecTransformFianlizeMethod finalize; */
      58             :     NULL,                                       /* xmlSecTransformNodeReadMethod readNode; */
      59             :     NULL,                                       /* xmlSecTransformNodeWriteMethod writeNode; */
      60             :     NULL,                                       /* xmlSecTransformSetKeyReqMethod setKeyReq; */
      61             :     NULL,                                       /* xmlSecTransformSetKeyMethod setKey; */
      62             :     NULL,                                       /* xmlSecTransformValidateMethod validate; */
      63             :     xmlSecTransformDefaultGetDataType,          /* xmlSecTransformGetDataTypeMethod getDataType; */
      64             :     xmlSecTransformDefaultPushBin,              /* xmlSecTransformPushBinMethod pushBin; */
      65             :     xmlSecTransformDefaultPopBin,               /* xmlSecTransformPopBinMethod popBin; */
      66             :     NULL,                                       /* xmlSecTransformPushXmlMethod pushXml; */
      67             :     NULL,                                       /* xmlSecTransformPopXmlMethod popXml; */
      68             :     xmlSecTransformMemBufExecute,               /* xmlSecTransformExecuteMethod execute; */
      69             : 
      70             :     NULL,                                       /* void* reserved0; */
      71             :     NULL,                                       /* void* reserved1; */
      72             : };
      73             : 
      74             : /**
      75             :  * xmlSecTransformMemBufGetKlass:
      76             :  * 
      77             :  * The memory buffer transorm (used to store the data that go through it).
      78             :  *
      79             :  * Returns: memory buffer transform klass.
      80             :  */
      81             : xmlSecTransformId 
      82           0 : xmlSecTransformMemBufGetKlass(void) {
      83           0 :     return(&xmlSecTransformMemBufKlass);
      84             : }
      85             : 
      86             : /**
      87             :  * xmlSecTransformMemBufGetBuffer:
      88             :  * @transform:          the pointer to memory buffer transform.
      89             :  * 
      90             :  * Gets the pointer to memory buffer transform buffer. 
      91             :  *
      92             :  * Returns: pointer to the transform's #xmlSecBuffer. 
      93             :  */
      94             : xmlSecBufferPtr
      95           0 : xmlSecTransformMemBufGetBuffer(xmlSecTransformPtr transform) {
      96             :     xmlSecBufferPtr buffer;
      97             : 
      98           0 :     xmlSecAssert2(xmlSecTransformCheckId(transform, xmlSecTransformMemBufId), NULL);
      99             :     
     100           0 :     buffer = xmlSecTransformMemBufGetBuf(transform);
     101           0 :     xmlSecAssert2(buffer != NULL, NULL);
     102             :     
     103           0 :     return(buffer);
     104             : }
     105             : 
     106             : static int
     107           0 : xmlSecTransformMemBufInitialize(xmlSecTransformPtr transform) {
     108             :     xmlSecBufferPtr buffer;
     109             :     int ret;
     110             :     
     111           0 :     xmlSecAssert2(xmlSecTransformCheckId(transform, xmlSecTransformMemBufId), -1);
     112             : 
     113           0 :     buffer = xmlSecTransformMemBufGetBuf(transform);
     114           0 :     xmlSecAssert2(buffer != NULL, -1);
     115             : 
     116           0 :     ret = xmlSecBufferInitialize(buffer, 0);
     117           0 :     if(ret < 0) {
     118           0 :         xmlSecError(XMLSEC_ERRORS_HERE,
     119           0 :                     xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
     120             :                     "xmlSecBufferInitialize",
     121             :                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
     122             :                     XMLSEC_ERRORS_NO_MESSAGE);
     123           0 :         return(-1);
     124             :     }
     125           0 :     return(0);    
     126             : }
     127             : 
     128             : static void
     129           0 : xmlSecTransformMemBufFinalize(xmlSecTransformPtr transform) {
     130             :     xmlSecBufferPtr buffer;
     131             : 
     132           0 :     xmlSecAssert(xmlSecTransformCheckId(transform, xmlSecTransformMemBufId));
     133             : 
     134           0 :     buffer = xmlSecTransformMemBufGetBuf(transform);
     135           0 :     xmlSecAssert(buffer != NULL);
     136             :     
     137           0 :     xmlSecBufferFinalize(xmlSecTransformMemBufGetBuf(transform)); 
     138             : }
     139             : 
     140             : static int 
     141           0 : xmlSecTransformMemBufExecute(xmlSecTransformPtr transform, int last, xmlSecTransformCtxPtr transformCtx) {
     142             :     xmlSecBufferPtr buffer;
     143             :     xmlSecBufferPtr in, out;
     144             :     xmlSecSize inSize;
     145             :     int ret;
     146             : 
     147           0 :     xmlSecAssert2(xmlSecTransformCheckId(transform, xmlSecTransformMemBufId), -1);
     148           0 :     xmlSecAssert2(transformCtx != NULL, -1);
     149             : 
     150           0 :     buffer = xmlSecTransformMemBufGetBuf(transform);
     151           0 :     xmlSecAssert2(buffer != NULL, -1);
     152             :     
     153           0 :     in = &(transform->inBuf);
     154           0 :     out = &(transform->outBuf);    
     155           0 :     inSize = xmlSecBufferGetSize(in);
     156             : 
     157           0 :     if(transform->status == xmlSecTransformStatusNone) {
     158           0 :         transform->status = xmlSecTransformStatusWorking;
     159             :     }
     160             :     
     161           0 :     if(transform->status == xmlSecTransformStatusWorking) {  
     162             :         /* just copy everything from in to our buffer and out */
     163           0 :         ret = xmlSecBufferAppend(buffer, xmlSecBufferGetData(in), inSize);
     164           0 :         if(ret < 0) {
     165           0 :             xmlSecError(XMLSEC_ERRORS_HERE, 
     166           0 :                         xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
     167             :                         "xmlSecBufferAppend",
     168             :                         XMLSEC_ERRORS_R_XMLSEC_FAILED,
     169             :                         "size=%d", inSize);
     170           0 :             return(-1);
     171             :         }
     172             :         
     173           0 :         ret = xmlSecBufferAppend(out, xmlSecBufferGetData(in), inSize);
     174           0 :         if(ret < 0) {
     175           0 :             xmlSecError(XMLSEC_ERRORS_HERE, 
     176           0 :                         xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
     177             :                         "xmlSecBufferAppend",
     178             :                         XMLSEC_ERRORS_R_XMLSEC_FAILED,
     179             :                         "size=%d", inSize);
     180           0 :             return(-1);
     181             :         }
     182             :         
     183           0 :         ret = xmlSecBufferRemoveHead(in, inSize);
     184           0 :         if(ret < 0) {
     185           0 :             xmlSecError(XMLSEC_ERRORS_HERE, 
     186           0 :                         xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
     187             :                         "xmlSecBufferRemoveHead",
     188             :                         XMLSEC_ERRORS_R_XMLSEC_FAILED,
     189             :                         "size=%d", inSize);
     190           0 :             return(-1);
     191             :         }
     192             :             
     193           0 :         if(last != 0) {
     194           0 :             transform->status = xmlSecTransformStatusFinished;
     195             :         }
     196           0 :     } else if(transform->status == xmlSecTransformStatusFinished) {
     197             :         /* the only way we can get here is if there is no input */
     198           0 :         xmlSecAssert2(inSize == 0, -1);
     199             :     } else {
     200           0 :         xmlSecError(XMLSEC_ERRORS_HERE, 
     201           0 :                     xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
     202             :                     NULL,
     203             :                     XMLSEC_ERRORS_R_INVALID_STATUS,
     204           0 :                     "status=%d", transform->status);
     205           0 :         return(-1);
     206             :     }
     207           0 :     return(0);
     208             : }
     209             : 

Generated by: LCOV version 1.10