3行代码,搞垮Domino服务器

声明:

此文撰写的目的在于探讨Domino开发技术,并尽量回避开发过程中有可能犯下的错误,请勿将其用于不适当的场合,否则后果自负!


前两天碰到一个奇怪的问题,某段代码一执行,就会立即触发NSD错误。如果代码运行在客户端,则客户端会被强制关闭。如果代码运行在服务器,则整个Domino服务器会立即瘫痪并被强制关闭。当时通过Lotusscript调试,发现在如下函数退出时程序崩溃:

Function  getVariant()  as  Variant
  
dim  vrnTemp  as  Variant
  ...
  
End Function

琢磨了半天,恍然大悟,忘了写返回值(-_-)b

更改后代码如下: 

Function  getVariant()  as  Variant
  
dim  vrnTemp  as  Variant
  ...
  getVariant 
=  vrnTemp  '  给函数赋返回值。这句是原来忘了写的。
End Function

 

 

这样一来问题就消失了,我也一度认为Variant型的函数必须赋返值,可是今天想再研究一下这问题时,却发现问题无法重现了。莫非是原来的推断有误?更深入的研究证实了这一点。原来,问题的产生的源头是另一个函数。

Function  wrongFunction()  as  Variant  
  ...
  
' vrnSource is a string array
  vrnSource  =  arrayappend(vrnSource, getVariant())  ' 其实是一执行到这里就NSD
  ...
End Function

实测结果表明,当使用ArrayAppend()方法时,如果第二个参数是Nothing,则会立即触发NSD错误。按照这个思路,完全可以写出类似以下的代码。

Dim  v  As  Variant
=   Split ( "" "" )
=  Arrayappend(v,  Nothing )

当代码执行时,便会触发NSD错误。如果类似有问题的代码放置服务器上,又设置为定时代理……后果不堪设想。 

PS:经测试,如果将第二个参数Nothing换为Null或者Empty,则不会出现类似的问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值