Changeset 75 in svn for trunk/xcache.c


Ignore:
Timestamp:
2006-06-08T09:16:19+02:00 (9 years ago)
Author:
Xuefer
Message:

proc all signal that may generate a core

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/xcache.c

    r65 r75  
    509509    int cacheid;
    510510    xc_entry_data_php_t *php;
     511    char *ptr;
    511512
    512513    if (!filename || !SG(request_info).path_translated) {
     
    523524        }
    524525
     526        /* absolute path */
    525527        pbuf = &buf;
    526528        if (IS_ABSOLUTE_PATH(filename, strlen(filename))) {
     
    528530                return 0;
    529531            }
    530         }
    531         else {
    532             if (xc_stat(filename, PG(include_path), pbuf TSRMLS_CC) != 0) {   
     532            break;
     533        }
     534
     535        /* relative path */
     536        if (*filename == '.' && (IS_SLASH(filename[1]) || filename[1] == '.')) {
     537            ptr = filename + 1;
     538            if (*ptr == '.') {
     539                while (*(++ptr) == '.');
     540                if (!IS_SLASH(*ptr)) {
     541                    goto not_relative_path;
     542                }   
     543            }
     544
     545            if (VCWD_STAT(filename, pbuf) != 0) {
    533546                return 0;
    534547            }
     548            break;
     549        }
     550not_relative_path:
     551
     552        /* use include_path */
     553        if (xc_stat(filename, PG(include_path), pbuf TSRMLS_CC) != 0) {   
     554            return 0;
    535555        }
    536556    } while (0);
     
    607627        cache->clogs ++; /* is it safe here? */
    608628        return origin_compile_file(h, type TSRMLS_CC);
     629    }
     630
     631    if (php_check_open_basedir(filename TSRMLS_CC) != 0) {
     632        return NULL;
    609633    }
    610634
     
    17201744/* }}} */
    17211745
    1722 /* signal handler */
    1723 static void (*original_sigsegv_handler)(int) = NULL;
    1724 static void xcache_sigsegv_handler(int sig) /* {{{ */
    1725 {
    1726     if (original_sigsegv_handler != xcache_sigsegv_handler) {
    1727         signal(SIGSEGV, original_sigsegv_handler);
    1728     }
    1729     else {
    1730         signal(SIGSEGV, SIG_DFL);
    1731     }
     1746/* old signal handlers {{{ */
     1747typedef void (*xc_sighandler_t)(int);
     1748#define FOREACH_SIG(sig) static xc_sighandler_t old_##sig##_handler = NULL
     1749#include "foreachcoresig.h"
     1750#undef FOREACH_SIG
     1751/* }}} */
     1752static void xcache_signal_handler(int sig);
     1753static void xcache_restore_signal_handler() /* {{{ */
     1754{
     1755#define FOREACH_SIG(sig) do { \
     1756    if (old_##sig##_handler != xcache_signal_handler) { \
     1757        signal(sig, old_##sig##_handler); \
     1758    } \
     1759    else { \
     1760        signal(sig, SIG_DFL); \
     1761    } \
     1762} while (0)
     1763#include "foreachcoresig.h"
     1764#undef FOREACH_SIG
     1765}
     1766/* }}} */
     1767static void xcache_init_signal_handler() /* {{{ */
     1768{
     1769#define FOREACH_SIG(sig) \
     1770    old_##sig##_handler = signal(sig, xcache_signal_handler)
     1771#include "foreachcoresig.h"
     1772#undef FOREACH_SIG
     1773}
     1774/* }}} */
     1775static void xcache_signal_handler(int sig) /* {{{ */
     1776{
     1777    xcache_restore_signal_handler();
    17321778    if (xc_coredump_dir && xc_coredump_dir[0]) {
    17331779        chdir(xc_coredump_dir);
     
    19011947
    19021948    if (xc_coredump_dir && xc_coredump_dir[0]) {
    1903         original_sigsegv_handler = signal(SIGSEGV, xcache_sigsegv_handler);
     1949        xcache_init_signal_handler();
    19041950    }
    19051951
     
    19411987
    19421988    if (xc_coredump_dir && xc_coredump_dir[0]) {
    1943         signal(SIGSEGV, original_sigsegv_handler);
     1989        xcache_restore_signal_handler();
    19441990    }
    19451991    if (xc_coredump_dir) {
Note: See TracChangeset for help on using the changeset viewer.