文章分类

禅道3.0.beta1插件安装清除文件bug补丁下载!

2012-01-10 20:43:44    王春生    7292    转贴
摘要:今天收到3群飞鸟网友的反馈,发现禅道3.0.beta1安装插件的时候,会把其所在分区的...

今天收到3群飞鸟网友的反馈,发现禅道3.0.beta1安装插件的时候,会把其所在分区的文件误删。这是一个非常严重的bug,感谢飞鸟网友的反馈,也非常抱歉,给大家造成不便和损失。

 

这个bug的缘由如下:

 

禅道插件安装的机制是从我们的网站下载插件包,然后将其解压缩到module/extension/ext目录下面。这样存在一个问题就是同一个插件的新版本安装的时候,也会解压缩到同样的目录,然后再拷贝到对应的目录里面去。这样就无法保证新版本插件安装时的目录和文件的纯粹性,因为可能还包含了老版本插件已经不再使用的文件或者目录。所以我们在3.0.beta1里面在安装插件之前,就增加了一个逻辑,先把extension/ext/xxx目录删掉。问题就出现在这个代码逻辑里面:

 

代码:module/extension/model.php

505 public function extractPackage($extension)
506 {
507 $return->result = 'ok';
508 $return->error = '';
509
510 /* try remove pre extracted files. */
511 $extensionPath = "ext/$extension";
512 $this->classFile->removeDir($extensionPath);

 

问题就出现在511行,如果是新安装一个插件的时候,ext/$extension这个目录其实不并存在,file.class.php里面的removeDir()方法会先尝试将传入的删除目录取realpath,然后再进行删除。而php里面的realpath方法对一个不存在的目录返回值为空,结果就变成了删除根目录。

 

我们平时的开发机都是在linux下面。linux下面的权限机制还是非常完善的,虽然是错误的操作,但其实并没有任何影响,所以就没有呈现不良的结果。但在windows下面,问题就出现了。apache运行所用的帐号往往是当前登录的帐号,就给删掉了。

 

如何解决这个bug呢,请下载附件里面的model.php,将其覆盖到禅道的model/extension/model.php,就可以了。

 

教训:

1. 不测试的代码肯定会有错误!

2. 跨平台的测试尤其关键。

3. 还是linux好。:)

 

再次向大家表示歉意,希望大家能够谅解。

 

禅道开发团队 2012年1月10日


评论列表
Liem   2012/01/19 11:01
是不是路径弄错了?应是 module/extension/model.php
ct455332   2012/01/11 14:01
亏好,刚才在试验机上测试的...D盘什么都没剩下
wwccss   2012/01/11 14:01
不安装插件的话,不会有这个问题的。下载我们的补丁文件,来修复这个问题。
Jason   2012/01/11 11:01
这问题搞大了,开始的时候我安装在的笔记本的C盘,那天无缘无故的C盘空间变大,大部分软件没了,害得我重新安装了系统,具体问题没有找到,后来我将禅道安装到我们的服务器上,今天早上无意中发现E盘空间变大了60多个G,这样搞不行啊!


发表评论
  评论通过审核后显示。
浙ICP备12017616号
蝉知1.6