projects
/
epoint
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
a6d3c7c
)
fix balance check in server logic
master
author
nsz
<nsz@port70.net>
Sun, 29 Jan 2012 19:00:26 +0000
(20:00 +0100)
committer
nsz
<nsz@port70.net>
Sun, 29 Jan 2012 19:00:26 +0000
(20:00 +0100)
pkg/server/server.go
patch
|
blob
|
history
diff --git
a/pkg/server/server.go
b/pkg/server/server.go
index
93d8da2
..
8be10b2
100644
(file)
--- a/
pkg/server/server.go
+++ b/
pkg/server/server.go
@@
-429,6
+429,10
@@
func handleDebit(w *work) (c []byte, err error) {
return
}
return
}
+func isIssuer(c *document.Cert) bool {
+ return c.Issuer == c.Holder
+}
+
func newDebitCert(w *work) (*document.DebitCert, error) {
cert := new(document.DebitCert)
cert.Holder = w.draft.Drawer
func newDebitCert(w *work) (*document.DebitCert, error) {
cert := new(document.DebitCert)
cert.Holder = w.draft.Drawer
@@
-461,6
+465,7
@@
func newDebitCert(w *work) (*document.DebitCert, error) {
// internal error
return nil, err
}
// internal error
return nil, err
}
+ // TODO: make sure oldcert and newcert cannot become inconsistent
// TODO: this is a hack
oldcert, err := document.ToCert(iv)
if err != nil {
// TODO: this is a hack
oldcert, err := document.ToCert(iv)
if err != nil {
@@
-473,8
+478,8
@@
func newDebitCert(w *work) (*document.DebitCert, error) {
if cert.Balance <= -IntLimit {
return nil, fmt.Errorf("balance limit exceeded: %d", cert.Balance)
}
if cert.Balance <= -IntLimit {
return nil, fmt.Errorf("balance limit exceeded: %d", cert.Balance)
}
- if
oldcert.Balance > 0
&& cert.Balance < 0 {
- return nil, fmt.Errorf("insufficient funds: %d
", oldcert.Bala
nce)
+ if
!isIssuer(&cert.Cert)
&& cert.Balance < 0 {
+ return nil, fmt.Errorf("insufficient funds: %d
, draft: %d", oldcert.Balance, cert.Differe
nce)
}
cert.LastDebitSerial = oldcert.LastDebitSerial
cert.LastCreditSerial = oldcert.LastCreditSerial
}
cert.LastDebitSerial = oldcert.LastDebitSerial
cert.LastCreditSerial = oldcert.LastCreditSerial
@@
-536,6
+541,10
@@
func newCreditCert(w *work) (*document.CreditCert, error) {
if cert.Balance >= IntLimit {
return nil, fmt.Errorf("balance limit exceeded: %d", cert.Balance)
}
if cert.Balance >= IntLimit {
return nil, fmt.Errorf("balance limit exceeded: %d", cert.Balance)
}
+ // sanity check
+ if isIssuer(&cert.Cert) && cert.Balance > 0 {
+ return nil, fmt.Errorf("internal error")
+ }
cert.LastDebitSerial = oldcert.LastDebitSerial
cert.LastCreditSerial = oldcert.LastCreditSerial
if _, ok := iv.(*document.DebitCert); ok {
cert.LastDebitSerial = oldcert.LastDebitSerial
cert.LastCreditSerial = oldcert.LastCreditSerial
if _, ok := iv.(*document.DebitCert); ok {