Annotation of embedaddon/php/ext/phar/phar_path_check.re, revision 1.1.1.3

1.1       misho       1: /*
                      2:   +----------------------------------------------------------------------+
                      3:   | phar php single-file executable PHP extension                        |
                      4:   +----------------------------------------------------------------------+
1.1.1.3 ! misho       5:   | Copyright (c) 2007-2013 The PHP Group                                |
1.1       misho       6:   +----------------------------------------------------------------------+
                      7:   | This source file is subject to version 3.01 of the PHP license,      |
                      8:   | that is bundled with this package in the file LICENSE, and is        |
                      9:   | available through the world-wide-web at the following url:           |
                     10:   | http://www.php.net/license/3_01.txt.                                 |
                     11:   | If you did not receive a copy of the PHP license and are unable to   |
                     12:   | obtain it through the world-wide-web, please send a note to          |
                     13:   | license@php.net so we can mail you a copy immediately.               |
                     14:   +----------------------------------------------------------------------+
                     15:   | Authors: Marcus Boerger <helly@php.net>                              |
                     16:   +----------------------------------------------------------------------+
                     17: */
                     18: 
1.1.1.2   misho      19: /* $Id$ */
1.1       misho      20: 
                     21: #include "phar_internal.h"
                     22: 
                     23: phar_path_check_result phar_path_check(char **s, int *len, const char **error)
                     24: {
                     25:        const unsigned char *p = (const unsigned char*)*s;
                     26:        const unsigned char *m;
                     27: 
                     28:        if (*len == 1 && *p == '.') {
                     29:                *error = "current directory reference";
                     30:                return pcr_err_curr_dir;
                     31:        } else if (*len == 2 && p[0] == '.' && p[1] == '.') {
                     32:                *error = "upper directory reference";
                     33:                return pcr_err_up_dir;
                     34:        }
                     35: 
                     36: #define YYCTYPE         unsigned char
                     37: #define YYCURSOR        p
                     38: #define YYLIMIT         p+*len
                     39: #define YYMARKER        m
                     40: #define YYFILL(n)
                     41: 
                     42: loop:
                     43: /*!re2c
                     44: END = "\x00";
                     45: ILL = [\x01-\x19\x80-\xFF];
                     46: EOS = "/" | END;
                     47: ANY = .;
                     48: "//"   {
                     49:                        *error = "double slash";
                     50:                        return pcr_err_double_slash;
                     51:                }
                     52: "/.." EOS {
                     53:                        *error = "upper directory reference";
                     54:                        return pcr_err_up_dir;
                     55:                }
                     56: "/." EOS {
                     57:                        *error = "current directory reference";
                     58:                        return pcr_err_curr_dir;
                     59:                }
                     60: "\\" {
                     61:                        *error = "back-slash";
                     62:                        return pcr_err_back_slash;
                     63:                }
                     64: "*" {
                     65:                        *error = "star";
                     66:                        return pcr_err_star;
                     67:                }
                     68: "?"    {
                     69:                        if (**s == '/') {
                     70:                                (*s)++;
                     71:                        }
                     72:                        *len = (p - (const unsigned char*)*s) -1;
                     73:                        *error = NULL;
                     74:                        return pcr_use_query;
                     75:                }
                     76: ILL {
                     77:                        *error ="illegal character";
                     78:                        return pcr_err_illegal_char;
                     79:                }
                     80: END {
                     81:                        if (**s == '/') {
                     82:                                (*s)++;
                     83:                                (*len)--;
                     84:                        }
                     85:                        if ((p - (const unsigned char*)*s) - 1 != *len)
                     86:                        {
                     87:                                *error ="illegal character";
                     88:                                return pcr_err_illegal_char;
                     89:                        }
                     90:                        *error = NULL;
                     91:                        return pcr_is_ok;
                     92:                }
                     93: ANY {
                     94:                        goto loop;
                     95:                }
                     96: */
                     97: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>