LTP GCOV extension - code coverage report
Current view: directory - ext/pcre/pcrelib - pcre_try_flipped.c
Test: PHP Code Coverage
Date: 2007-04-10 Instrumented lines: 21
Code covered: 0.0 % Executed lines: 0
Legend: not executed executed

       1                 : /*************************************************
       2                 : *      Perl-Compatible Regular Expressions       *
       3                 : *************************************************/
       4                 : 
       5                 : /* PCRE is a library of functions to support regular expressions whose syntax
       6                 : and semantics are as close as possible to those of the Perl 5 language.
       7                 : 
       8                 :                        Written by Philip Hazel
       9                 :            Copyright (c) 1997-2006 University of Cambridge
      10                 : 
      11                 : -----------------------------------------------------------------------------
      12                 : Redistribution and use in source and binary forms, with or without
      13                 : modification, are permitted provided that the following conditions are met:
      14                 : 
      15                 :     * Redistributions of source code must retain the above copyright notice,
      16                 :       this list of conditions and the following disclaimer.
      17                 : 
      18                 :     * Redistributions in binary form must reproduce the above copyright
      19                 :       notice, this list of conditions and the following disclaimer in the
      20                 :       documentation and/or other materials provided with the distribution.
      21                 : 
      22                 :     * Neither the name of the University of Cambridge nor the names of its
      23                 :       contributors may be used to endorse or promote products derived from
      24                 :       this software without specific prior written permission.
      25                 : 
      26                 : THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
      27                 : AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
      28                 : IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
      29                 : ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
      30                 : LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
      31                 : CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
      32                 : SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
      33                 : INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
      34                 : CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
      35                 : ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
      36                 : POSSIBILITY OF SUCH DAMAGE.
      37                 : -----------------------------------------------------------------------------
      38                 : */
      39                 : 
      40                 : 
      41                 : /* This module contains an internal function that tests a compiled pattern to
      42                 : see if it was compiled with the opposite endianness. If so, it uses an
      43                 : auxiliary local function to flip the appropriate bytes. */
      44                 : 
      45                 : 
      46                 : #include "pcre_internal.h"
      47                 : 
      48                 : 
      49                 : /*************************************************
      50                 : *         Flip bytes in an integer               *
      51                 : *************************************************/
      52                 : 
      53                 : /* This function is called when the magic number in a regex doesn't match, in
      54                 : order to flip its bytes to see if we are dealing with a pattern that was
      55                 : compiled on a host of different endianness. If so, this function is used to
      56                 : flip other byte values.
      57                 : 
      58                 : Arguments:
      59                 :   value        the number to flip
      60                 :   n            the number of bytes to flip (assumed to be 2 or 4)
      61                 : 
      62                 : Returns:       the flipped value
      63                 : */
      64                 : 
      65                 : static unsigned long int
      66                 : byteflip(unsigned long int value, int n)
      67               0 : {
      68               0 : if (n == 2) return ((value & 0x00ff) << 8) | ((value & 0xff00) >> 8);
      69               0 : return ((value & 0x000000ff) << 24) |
      70                 :        ((value & 0x0000ff00) <<  8) |
      71                 :        ((value & 0x00ff0000) >>  8) |
      72                 :        ((value & 0xff000000) >> 24);
      73                 : }
      74                 : 
      75                 : 
      76                 : 
      77                 : /*************************************************
      78                 : *       Test for a byte-flipped compiled regex   *
      79                 : *************************************************/
      80                 : 
      81                 : /* This function is called from pcre_exec(), pcre_dfa_exec(), and also from
      82                 : pcre_fullinfo(). Its job is to test whether the regex is byte-flipped - that
      83                 : is, it was compiled on a system of opposite endianness. The function is called
      84                 : only when the native MAGIC_NUMBER test fails. If the regex is indeed flipped,
      85                 : we flip all the relevant values into a different data block, and return it.
      86                 : 
      87                 : Arguments:
      88                 :   re               points to the regex
      89                 :   study            points to study data, or NULL
      90                 :   internal_re      points to a new regex block
      91                 :   internal_study   points to a new study block
      92                 : 
      93                 : Returns:           the new block if is is indeed a byte-flipped regex
      94                 :                    NULL if it is not
      95                 : */
      96                 : 
      97                 : real_pcre *
      98                 : _pcre_try_flipped(const real_pcre *re, real_pcre *internal_re,
      99                 :   const pcre_study_data *study, pcre_study_data *internal_study)
     100               0 : {
     101               0 : if (byteflip(re->magic_number, sizeof(re->magic_number)) != MAGIC_NUMBER)
     102               0 :   return NULL;
     103                 : 
     104               0 : *internal_re = *re;           /* To copy other fields */
     105               0 : internal_re->size = byteflip(re->size, sizeof(re->size));
     106               0 : internal_re->options = byteflip(re->options, sizeof(re->options));
     107               0 : internal_re->top_bracket =
     108                 :   (pcre_uint16)byteflip(re->top_bracket, sizeof(re->top_bracket));
     109               0 : internal_re->top_backref =
     110                 :   (pcre_uint16)byteflip(re->top_backref, sizeof(re->top_backref));
     111               0 : internal_re->first_byte =
     112                 :   (pcre_uint16)byteflip(re->first_byte, sizeof(re->first_byte));
     113               0 : internal_re->req_byte =
     114                 :   (pcre_uint16)byteflip(re->req_byte, sizeof(re->req_byte));
     115               0 : internal_re->name_table_offset =
     116                 :   (pcre_uint16)byteflip(re->name_table_offset, sizeof(re->name_table_offset));
     117               0 : internal_re->name_entry_size =
     118                 :   (pcre_uint16)byteflip(re->name_entry_size, sizeof(re->name_entry_size));
     119               0 : internal_re->name_count =
     120                 :   (pcre_uint16)byteflip(re->name_count, sizeof(re->name_count));
     121                 : 
     122               0 : if (study != NULL)
     123                 :   {
     124               0 :   *internal_study = *study;   /* To copy other fields */
     125               0 :   internal_study->size = byteflip(study->size, sizeof(study->size));
     126               0 :   internal_study->options = byteflip(study->options, sizeof(study->options));
     127                 :   }
     128                 : 
     129               0 : return internal_re;
     130                 : }
     131                 : 
     132                 : /* End of pcre_tryflipped.c */

Generated by: LTP GCOV extension version 1.5