Skip to content
This repository has been archived by the owner on Sep 1, 2020. It is now read-only.

Incorrect login in Loader.php #72

Open
char101 opened this issue Nov 28, 2017 · 2 comments
Open

Incorrect login in Loader.php #72

char101 opened this issue Nov 28, 2017 · 2 comments

Comments

@char101
Copy link
Contributor

char101 commented Nov 28, 2017

https://github.com/dwoo-project/dwoo/blob/master/lib/Dwoo/Loader.php#L131

This expression will always be false even when

isset($this->classPath[$class]) && is_readable($this->classPath[$class]) == true

because

isset($this->classPath[$class . 'Compile']) && is_readable($this->classPath[$class . 'Compile']) == false

Correct logic is

if (!(isset($this->classPath[$class]) && is_readable($this->classPath[$class])) &&
    !(isset($this->classPath[$class . 'Compile']) && is_readable($this->classPath[$class . 'Compile']))) {
@char101
Copy link
Contributor Author

char101 commented Nov 28, 2017

Also the if needs an else clause when the plugin already exists in $this->classPath

        } else {
            if (isset($this->classPath[$class])) {
                include_once $this->classPath[$class];
            } elseif (isset($this->classPath[$class . 'Compile'])) {
                include_once $this->classPath[$class . 'Compile'];
            }
        }

@char101
Copy link
Contributor Author

char101 commented Nov 28, 2017

I think this is easier to digest

    public function loadPlugin($class, $forceRehash = true)
    {
        /**
         * An unknown class was requested (maybe newly added) or the
         * include failed so we rebuild the cache. include() will fail
         * with an uncatchable error if the file doesn't exist, which
         * usually means that the cache is stale and must be rebuilt,
         * so we check for that before trying to include() the plugin.
         */
        if (isset($this->classPath[$class]) && is_readable($this->classPath[$class])) {
            include_once $this->classPath[$class];
        } elseif (isset($this->classPath[$class . 'Compile']) && is_readable($this->classPath[$class . 'Compile'])) {
            include_once $this->classPath[$class . 'Compile'];
        } else {
            if ($forceRehash) {
                $this->rebuildClassPathCache($this->corePluginDir, $this->cacheDir . 'classpath.cache.d' .
                    Core::RELEASE_TAG . '.php');
                foreach ($this->paths as $path => $file) {
                    $this->rebuildClassPathCache($path, $file);
                }
                if (isset($this->classPath[$class])) {
                    include_once $this->classPath[$class];
                } elseif (isset($this->classPath[$class . 'Compile'])) {
                    include_once $this->classPath[$class . 'Compile'];
                } else {
                    throw new Exception('Plugin "' . $class . '" can not be found, maybe you forgot to bind it if it\'s a custom plugin ?', E_USER_NOTICE);
                }
            } else {
                throw new Exception('Plugin "' . $class . '" can not be found, maybe you forgot to bind it if it\'s a custom plugin ?', E_USER_NOTICE);
            }
        }
    }

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant