Overview
Comment:Améliorations permises par passage à PHP 5.6
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | dev
Files: files | file ages | folders
SHA1: 653437ae4ff1d4886d54e2f8b4f58ebc31e81ffb
User & Date: bohwaz on 2017-04-27 05:10:05
Other Links: branch diff | manifest | tags
Context
2017-04-27
05:27
Les fonctions get* doivent toujours retourner un tableau check-in: 29880c37a5 user: bohwaz tags: dev
05:10
Améliorations permises par passage à PHP 5.6 check-in: 653437ae4f user: bohwaz tags: dev
2017-04-26
12:41
Outil pour tester les problèmes de compatibilité des plugins avec la version 0.8 check-in: 52c3f195fa user: bohwaz tags: dev
Changes

Modified src/include/lib/Garradin/DB.php from [9ea38a4c6c] to [ac30598b52].

425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506

        if ($mode === self::OBJ)
        {
            $as_obj = true;
            $mode = self::ASSOC;
        }

        $out = [];

        while ($row = $result->fetchArray($mode))
        {
            // FIXME: use generator (PHP 5.6+)
            $out[] = $as_obj ? (object) $row : $row;
        }

        $result->finalize();
        unset($result, $row);

        return $out;
    }

    /**
     * Récupère le résultat d'un statement sous forme de tableau associatif
     * avec colonne1 comme clé et colonne2 comme valeur.
     * 
     * @param  \SQLite3Result $result Résultat de statement
     * @param  integer        $mode   Mode de récupération (BOTH, OBJ, NUM ou ASSOC)
     * @return array
     */
    protected function fetchAssoc(\SQLite3Result $result)
    {
        $out = [];

        while ($row = $result->fetchArray(\SQLITE3_NUM))
        {
            // FIXME: use generator
            $out[$row[0]] = $row[1];
        }

        $result->finalize();
        unset($result, $row);

        return $out;
    }

    /**
     * Récupère le résultat d'un statement sous forme de tableau associatif 
     * avec colonne1 comme clé et la ligne comme valeur.
     * @param  \SQLite3Result $result Résultat de statement
     * @param  integer        $mode   Mode de récupération (BOTH, OBJ, NUM ou ASSOC)
     * @return array
     */
    protected function fetchAssocKey(\SQLite3Result $result, $mode = null)
    {
        $as_obj = false;

        if ($mode === self::OBJ)
        {
            $as_obj = true;
            $mode = self::ASSOC;
        }

        $out = [];

        while ($row = $result->fetchArray($mode))
        {
            // FIXME: use generator (PHP 5.6+)
            $key = current($row);
            $out[$key] = $as_obj ? (object) $row : $row;
        }

        $result->finalize();
        unset($result, $row);

        return $out;
    }

    /**
     * Compte le nombre de lignes dans un résultat
     * @param  \SQLite3Result $result Résultat SQLite3
     * @return integer
     */







<
<


<
|





|












<
<


<
|





|



















<
<


<

|



|

|







425
426
427
428
429
430
431


432
433

434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452


453
454

455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480


481
482

483
484
485
486
487
488
489
490
491
492
493
494
495
496
497

        if ($mode === self::OBJ)
        {
            $as_obj = true;
            $mode = self::ASSOC;
        }



        while ($row = $result->fetchArray($mode))
        {

            yield ($as_obj ? (object) $row : $row);
        }

        $result->finalize();
        unset($result, $row);

        return;
    }

    /**
     * Récupère le résultat d'un statement sous forme de tableau associatif
     * avec colonne1 comme clé et colonne2 comme valeur.
     * 
     * @param  \SQLite3Result $result Résultat de statement
     * @param  integer        $mode   Mode de récupération (BOTH, OBJ, NUM ou ASSOC)
     * @return array
     */
    protected function fetchAssoc(\SQLite3Result $result)
    {


        while ($row = $result->fetchArray(\SQLITE3_NUM))
        {

            yield $row[0] => $row[1];
        }

        $result->finalize();
        unset($result, $row);

        return;
    }

    /**
     * Récupère le résultat d'un statement sous forme de tableau associatif 
     * avec colonne1 comme clé et la ligne comme valeur.
     * @param  \SQLite3Result $result Résultat de statement
     * @param  integer        $mode   Mode de récupération (BOTH, OBJ, NUM ou ASSOC)
     * @return array
     */
    protected function fetchAssocKey(\SQLite3Result $result, $mode = null)
    {
        $as_obj = false;

        if ($mode === self::OBJ)
        {
            $as_obj = true;
            $mode = self::ASSOC;
        }



        while ($row = $result->fetchArray($mode))
        {

            $key = current($row);
            yield $key => ($as_obj ? (object) $row : $row);
        }

        $result->finalize();
        unset($result, $row, $key);

        return;
    }

    /**
     * Compte le nombre de lignes dans un résultat
     * @param  \SQLite3Result $result Résultat SQLite3
     * @return integer
     */

Modified src/include/lib/Garradin/Membres.php from [4464c9f554] to [95b303a224].

31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71

    static public function hashPassword($password)
    {
        // Remove NUL bytes
        // see http://blog.ircmaxell.com/2015/03/security-issue-combining-bcrypt-with.html
        $password = str_replace("\0", '', $password);

        if (function_exists('password_hash'))
        {
            return password_hash($password, \PASSWORD_DEFAULT);
        }
        else
        {
            // Support for PHP < 5.5, FIXME: remove when dropping support for PHP 5.4
            $salt = '$2a$08$' . self::_getSalt(22);
            return crypt($password, $salt);
        }
    }

    static public function checkPassword($password, $stored_hash)
    {
        // Remove NUL bytes
        // see http://blog.ircmaxell.com/2015/03/security-issue-combining-bcrypt-with.html
        $password = str_replace("\0", '', $password);

        if (function_exists('password_verify'))
        {
            return password_verify($password, $stored_hash);
        }
        else
        {
            // Support for PHP < 5.5, FIXME: remove when dropping support for PHP 5.4
            return crypt($password, $stored_hash) === $stored_hash;
        }
    }

    // Gestion des données ///////////////////////////////////////////////////////

    public function _checkFields(&$data, $check_editable = true, $check_password = true)
    {
        $champs = Config::getInstance()->get('champs_membres');







<
<
|
<
<
<
<
<
<
<








<
<
|
<
<
<
<
<
<







31
32
33
34
35
36
37


38







39
40
41
42
43
44
45
46


47






48
49
50
51
52
53
54

    static public function hashPassword($password)
    {
        // Remove NUL bytes
        // see http://blog.ircmaxell.com/2015/03/security-issue-combining-bcrypt-with.html
        $password = str_replace("\0", '', $password);



        return password_hash($password, \PASSWORD_DEFAULT);







    }

    static public function checkPassword($password, $stored_hash)
    {
        // Remove NUL bytes
        // see http://blog.ircmaxell.com/2015/03/security-issue-combining-bcrypt-with.html
        $password = str_replace("\0", '', $password);



        return password_verify($password, $stored_hash);






    }

    // Gestion des données ///////////////////////////////////////////////////////

    public function _checkFields(&$data, $check_editable = true, $check_password = true)
    {
        $champs = Config::getInstance()->get('champs_membres');

Modified src/index.php from [c3be9b45ef] to [77aa99b396].

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

// Ce fichier n'est pas censé être appelé sauf si l'installation de Garradin
// n'est pas effectuée correctement avec le vhost pointant sur le répertoire www/
// auquel cas on limite les dégâts

// Juste une vérification avant de continuer
if (!version_compare(phpversion(), '5.4.0', '>='))
{
	die('PHP 5.4.0 ou supérieur est nécessaire au fonctionnement de Garradin.');
}

header('Location: www/');







|

|



1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

// Ce fichier n'est pas censé être appelé sauf si l'installation de Garradin
// n'est pas effectuée correctement avec le vhost pointant sur le répertoire www/
// auquel cas on limite les dégâts

// Juste une vérification avant de continuer
if (!version_compare(phpversion(), '5.6.0', '>='))
{
	die('PHP 5.6.0 ou supérieur est nécessaire au fonctionnement de Garradin.');
}

header('Location: www/');

Modified src/www/admin/install.php from [8fc796e697] to [a29cc0c7e4].

31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
        echo "Pour plus d'informations consulter http://dev.kd2.org/garradin/Probl%C3%A8mes%20fr%C3%A9quents\n";
    }

    exit;
}

test_requis(
    version_compare(phpversion(), '5.4', '>='),
    'PHP 5.4 ou supérieur requis. PHP version ' . phpversion() . ' installée.'
);

test_requis(
    defined('CRYPT_BLOWFISH') && CRYPT_BLOWFISH,
    'L\'algorithme de hashage de mot de passe Blowfish n\'est pas présent (pas installé ou pas compilé).'
);








|
|







31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
        echo "Pour plus d'informations consulter http://dev.kd2.org/garradin/Probl%C3%A8mes%20fr%C3%A9quents\n";
    }

    exit;
}

test_requis(
    version_compare(phpversion(), '5.6', '>='),
    'PHP 5.6 ou supérieur requis. PHP version ' . phpversion() . ' installée.'
);

test_requis(
    defined('CRYPT_BLOWFISH') && CRYPT_BLOWFISH,
    'L\'algorithme de hashage de mot de passe Blowfish n\'est pas présent (pas installé ou pas compilé).'
);