Issues (108)

Security Analysis    not enabled

This project does not seem to handle request data directly as such no vulnerable execution paths were found.

  Cross-Site Scripting
Cross-Site Scripting enables an attacker to inject code into the response of a web-request that is viewed by other users. It can for example be used to bypass access controls, or even to take over other users' accounts.
  File Exposure
File Exposure allows an attacker to gain access to local files that he should not be able to access. These files can for example include database credentials, or other configuration files.
  File Manipulation
File Manipulation enables an attacker to write custom data to files. This potentially leads to injection of arbitrary code on the server.
  Object Injection
Object Injection enables an attacker to inject an object into PHP code, and can lead to arbitrary code execution, file exposure, or file manipulation attacks.
  Code Injection
Code Injection enables an attacker to execute arbitrary code on the server.
  Response Splitting
Response Splitting can be used to send arbitrary responses.
  File Inclusion
File Inclusion enables an attacker to inject custom files into PHP's file loading mechanism, either explicitly passed to include, or for example via PHP's auto-loading mechanism.
  Command Injection
Command Injection enables an attacker to inject a shell command that is execute with the privileges of the web-server. This can be used to expose sensitive data, or gain access of your server.
  SQL Injection
SQL Injection enables an attacker to execute arbitrary SQL code on your database server gaining access to user data, or manipulating user data.
  XPath Injection
XPath Injection enables an attacker to modify the parts of XML document that are read. If that XML document is for example used for authentication, this can lead to further vulnerabilities similar to SQL Injection.
  LDAP Injection
LDAP Injection enables an attacker to inject LDAP statements potentially granting permission to run unauthorized queries, or modify content inside the LDAP tree.
  Header Injection
  Other Vulnerability
This category comprises other attack vectors such as manipulating the PHP runtime, loading custom extensions, freezing the runtime, or similar.
  Regex Injection
Regex Injection enables an attacker to execute arbitrary code in your PHP process.
  XML Injection
XML Injection enables an attacker to read files on your local filesystem including configuration files, or can be abused to freeze your web-server process.
  Variable Injection
Variable Injection enables an attacker to overwrite program variables with custom data, and can lead to further vulnerabilities.
Unfortunately, the security analysis is currently not available for your project. If you are a non-commercial open-source project, please contact support to gain access.

js/rotate.js (10 issues)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
// VERSION: 2.3 LAST UPDATE: 11.07.2013
2
/*
3
 * Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
4
 *
5
 * Made by Wilq32, [email protected], Wroclaw, Poland, 01.2009
6
 * Website: http://jqueryrotate.com
7
 */
8
9
(function($) {
10
    var supportedCSS,supportedCSSOrigin, styles=document.getElementsByTagName("head")[0].style,toCheck="transformProperty WebkitTransform OTransform msTransform MozTransform".split(" ");
11
    for (var a = 0; a < toCheck.length; a++) if (styles[toCheck[a]] !== undefined) { supportedCSS = toCheck[a]; }
12
    if (supportedCSS) {
13
      supportedCSSOrigin = supportedCSS.replace(/[tT]ransform/,"TransformOrigin");
14
      if (supportedCSSOrigin[0] == "T") supportedCSSOrigin[0] = "t";
15
    }
16
17
    // Bad eval to preven google closure to remove it from code o_O
18
    eval('IE = "v"=="\v"');
0 ignored issues
show
Coding Style Security introduced by
The use of eval is generally not recommended.

The use of eval is discouraged because it can potentially make your code vulnerable to various injection attacks.

Besides it will also prevent certain optimizations that runtimes otherwise could make.

Loading history...
19
20
    jQuery.fn.extend({
21
        rotate:function(parameters)
22
        {
23
          if (this.length===0||typeof parameters=="undefined") return;
24
          if (typeof parameters=="number") parameters={angle:parameters};
25
          var returned=[];
26
          for (var i=0,i0=this.length;i<i0;i++)
27
          {
28
            var element=this.get(i);
29
            if (!element.Wilq32 || !element.Wilq32.PhotoEffect) {
30
31
              var paramClone = $.extend(true, {}, parameters);
32
              var newRotObject = new Wilq32.PhotoEffect(element,paramClone)._rootObj;
0 ignored issues
show
Wilq32 does not seem to be defined.
Loading history...
33
34
              returned.push($(newRotObject));
35
            }
36
            else {
37
              element.Wilq32.PhotoEffect._handleRotation(parameters);
38
            }
39
          }
40
          return returned;
41
        },
42
        getRotateAngle: function(){
43
          var ret = [0];
44
          for (var i=0,i0=this.length;i<i0;i++)
45
          {
46
            var element=this.get(i);
47
            if (element.Wilq32 && element.Wilq32.PhotoEffect) {
48
              ret[i] = element.Wilq32.PhotoEffect._angle;
49
            }
50
          }
51
          return ret;
52
        },
53
        stopRotate: function(){
54
          for (var i=0,i0=this.length;i<i0;i++)
55
          {
56
            var element=this.get(i);
57
            if (element.Wilq32 && element.Wilq32.PhotoEffect) {
58
              clearTimeout(element.Wilq32.PhotoEffect._timer);
59
            }
60
          }
61
        }
62
    });
63
64
    // Library agnostic interface
65
66
    Wilq32=window.Wilq32||{};
0 ignored issues
show
Wilq32 does not seem to be defined.
Loading history...
67
    Wilq32.PhotoEffect=(function(){
0 ignored issues
show
Wilq32 does not seem to be defined.
Loading history...
68
69
      if (supportedCSS) {
70
        return function(img,parameters){
71
          img.Wilq32 = {
72
            PhotoEffect: this
73
          };
74
75
          this._img = this._rootObj = this._eventObj = img;
76
          this._handleRotation(parameters);
77
        }
78
      } else {
79
        return function(img,parameters) {
80
          this._img = img;
81
          this._onLoadDelegate = [parameters];
82
83
          this._rootObj=document.createElement('span');
84
          this._rootObj.style.display="inline-block";
85
          this._rootObj.Wilq32 =
86
            {
87
              PhotoEffect: this
88
            };
89
          img.parentNode.insertBefore(this._rootObj,img);
90
91
          if (img.complete) {
92
            this._Loader();
93
          } else {
94
            var self=this;
95
            // TODO: Remove jQuery dependency
96
            jQuery(this._img).bind("load", function(){ self._Loader(); });
97
          }
98
        }
99
      }
100
    })();
101
102
    Wilq32.PhotoEffect.prototype = {
0 ignored issues
show
Wilq32 does not seem to be defined.
Loading history...
103
      _setupParameters : function (parameters){
104
        this._parameters = this._parameters || {};
105
        if (typeof this._angle !== "number") { this._angle = 0 ; }
106
        if (typeof parameters.angle==="number") { this._angle = parameters.angle; }
107
        this._parameters.animateTo = (typeof parameters.animateTo === "number") ? (parameters.animateTo) : (this._angle);
108
109
        this._parameters.step = parameters.step || this._parameters.step || null;
110
        this._parameters.easing = parameters.easing || this._parameters.easing || this._defaultEasing;
111
        this._parameters.duration = 'duration' in parameters ? parameters.duration : parameters.duration || this._parameters.duration || 1000;
112
        this._parameters.callback = parameters.callback || this._parameters.callback || this._emptyFunction;
113
        this._parameters.center = parameters.center || this._parameters.center || ["50%","50%"];
114
        if (typeof this._parameters.center[0] == "string") {
115
          this._rotationCenterX = (parseInt(this._parameters.center[0],10) / 100) * this._imgWidth * this._aspectW;
116
        } else {
117
          this._rotationCenterX = this._parameters.center[0];
118
        }
119
        if (typeof this._parameters.center[1] == "string") {
120
          this._rotationCenterY = (parseInt(this._parameters.center[1],10) / 100) * this._imgHeight * this._aspectH;
121
        } else {
122
          this._rotationCenterY = this._parameters.center[1];
123
        }
124
125
        if (parameters.bind && parameters.bind != this._parameters.bind) { this._BindEvents(parameters.bind); }
126
      },
127
      _emptyFunction: function(){},
128
      _defaultEasing: function (x, t, b, c, d) { return -c * ((t=t/d-1)*t*t*t - 1) + b },
129
      _handleRotation : function(parameters, dontcheck){
130
        if (!supportedCSS && !this._img.complete && !dontcheck) {
131
          this._onLoadDelegate.push(parameters);
132
          return;
133
        }
134
        this._setupParameters(parameters);
135
        if (this._angle==this._parameters.animateTo) {
136
          this._rotate(this._angle);
137
        }
138
        else {
139
          this._animateStart();
140
        }
141
      },
142
143
      _BindEvents:function(events){
144
        if (events && this._eventObj)
145
        {
146
          // Unbinding previous Events
147
          if (this._parameters.bind){
148
            var oldEvents = this._parameters.bind;
149
            for (var a in oldEvents) if (oldEvents.hasOwnProperty(a))
150
              // TODO: Remove jQuery dependency
151
              jQuery(this._eventObj).unbind(a,oldEvents[a]);
152
          }
153
154
        this._parameters.bind = events;
155
        for (var a in events) if (events.hasOwnProperty(a))
0 ignored issues
show
It seems like a was already defined.
Loading history...
156
          // TODO: Remove jQuery dependency
157
          jQuery(this._eventObj).bind(a,events[a]);
158
        }
159
      },
160
161
      _Loader:(function()
162
      {
163
        if (IE)
164
          return function() {
165
            var width=this._img.width;
166
            var height=this._img.height;
167
            this._imgWidth = width;
168
            this._imgHeight = height;
169
            this._img.parentNode.removeChild(this._img);
170
171
            this._vimage = this.createVMLNode('image');
172
            this._vimage.src=this._img.src;
173
            this._vimage.style.height=height+"px";
174
            this._vimage.style.width=width+"px";
175
            this._vimage.style.position="absolute"; // FIXES IE PROBLEM - its only rendered if its on absolute position!
176
            this._vimage.style.top = "0px";
177
            this._vimage.style.left = "0px";
178
            this._aspectW = this._aspectH = 1;
179
180
            /* Group minifying a small 1px precision problem when rotating object */
181
            this._container = this.createVMLNode('group');
182
            this._container.style.width=width;
183
            this._container.style.height=height;
184
            this._container.style.position="absolute";
185
            this._container.style.top="0px";
186
            this._container.style.left="0px";
187
            this._container.setAttribute('coordsize',width-1+','+(height-1)); // This -1, -1 trying to fix ugly problem with small displacement on IE
188
            this._container.appendChild(this._vimage);
189
190
            this._rootObj.appendChild(this._container);
191
            this._rootObj.style.position="relative"; // FIXES IE PROBLEM
192
            this._rootObj.style.width=width+"px";
193
            this._rootObj.style.height=height+"px";
194
            this._rootObj.setAttribute('id',this._img.getAttribute('id'));
195
            this._rootObj.className=this._img.className;
196
            this._eventObj = this._rootObj;
197
            var parameters;
198
            while (parameters = this._onLoadDelegate.shift()) {
0 ignored issues
show
Are you sure that this assignment is correct, and you did not intend to make a comparison?

Even if this assignment is intended here, we recommend to make this explicit in order to make your code more readable and your intention clear:

1. Assignment in

var x;
if (x = 0) { // Very likely a bug.
    var b = 1;
}

// Instead

var x;
if (x === 0) {
    var b = 1;
}

2. Assignment in

functon setHeight(node, height) {
    do {
        node.height = height;
    } while (node = node.parentNode);
}

// Instead you could use

function setHeight(node, height) {
    do {
        node.height = height;
    } while ((node = node.parentNode) !== null);
}

3. Uninitialized loop variable

var i = 0, sum;
for (i < 10; i += 1) {
    sum += i;
}

// Instead

var i = 0, sum;
for (i = 0; i < 10; i += 1) {
    sum += i;
}
Loading history...
199
              this._handleRotation(parameters, true);
200
            }
201
          }
202
          else return function () {
203
            this._rootObj.setAttribute('id',this._img.getAttribute('id'));
204
            this._rootObj.className=this._img.className;
205
206
            this._imgWidth=this._img.naturalWidth;
207
            this._imgHeight=this._img.naturalHeight;
208
            var _widthMax=Math.sqrt((this._imgHeight)*(this._imgHeight) + (this._imgWidth) * (this._imgWidth));
209
            this._width = _widthMax * 3;
210
            this._height = _widthMax * 3;
211
212
            this._aspectW = this._img.offsetWidth/this._img.naturalWidth;
213
            this._aspectH = this._img.offsetHeight/this._img.naturalHeight;
214
215
            this._img.parentNode.removeChild(this._img);
216
217
218
            this._canvas=document.createElement('canvas');
219
            this._canvas.setAttribute('width',this._width);
220
            this._canvas.style.position="relative";
221
            this._canvas.style.left = -this._img.height * this._aspectW + "px";
222
            this._canvas.style.top = -this._img.width * this._aspectH + "px";
223
            this._canvas.Wilq32 = this._rootObj.Wilq32;
224
225
            this._rootObj.appendChild(this._canvas);
226
            this._rootObj.style.width=this._img.width*this._aspectW+"px";
227
            this._rootObj.style.height=this._img.height*this._aspectH+"px";
228
            this._eventObj = this._canvas;
229
230
            this._cnv=this._canvas.getContext('2d');
231
            var parameters;
232
            while (parameters = this._onLoadDelegate.shift()) {
0 ignored issues
show
Are you sure that this assignment is correct, and you did not intend to make a comparison?

Even if this assignment is intended here, we recommend to make this explicit in order to make your code more readable and your intention clear:

1. Assignment in

var x;
if (x = 0) { // Very likely a bug.
    var b = 1;
}

// Instead

var x;
if (x === 0) {
    var b = 1;
}

2. Assignment in

functon setHeight(node, height) {
    do {
        node.height = height;
    } while (node = node.parentNode);
}

// Instead you could use

function setHeight(node, height) {
    do {
        node.height = height;
    } while ((node = node.parentNode) !== null);
}

3. Uninitialized loop variable

var i = 0, sum;
for (i < 10; i += 1) {
    sum += i;
}

// Instead

var i = 0, sum;
for (i = 0; i < 10; i += 1) {
    sum += i;
}
Loading history...
233
              this._handleRotation(parameters, true);
234
            }
235
          }
236
      })(),
237
238
      _animateStart:function()
239
      {
240
        if (this._timer) {
241
          clearTimeout(this._timer);
242
        }
243
        this._animateStartTime = +new Date;
244
        this._animateStartAngle = this._angle;
245
        this._animate();
246
      },
247
      _animate:function()
248
      {
249
        var actualTime = +new Date;
250
        var checkEnd = actualTime - this._animateStartTime > this._parameters.duration;
251
252
        // TODO: Bug for animatedGif for static rotation ? (to test)
253
        if (checkEnd && !this._parameters.animatedGif)
254
        {
255
          clearTimeout(this._timer);
256
        }
257
        else
258
        {
259
          if (this._canvas||this._vimage||this._img) {
260
            var angle = this._parameters.easing(0, actualTime - this._animateStartTime, this._animateStartAngle, this._parameters.animateTo - this._animateStartAngle, this._parameters.duration);
261
            this._rotate((~~(angle*10))/10);
262
          }
263
          if (this._parameters.step) {
264
            this._parameters.step(this._angle);
265
          }
266
          var self = this;
267
          this._timer = setTimeout(function()
268
          {
269
            self._animate.call(self);
270
          }, 10);
271
        }
272
273
      // To fix Bug that prevents using recursive function in callback I moved this function to back
274
      if (this._parameters.callback && checkEnd){
275
        this._angle = this._parameters.animateTo;
276
        this._rotate(this._angle);
277
        this._parameters.callback.call(this._rootObj);
278
      }
279
      },
280
281
      _rotate : (function()
282
      {
283
        var rad = Math.PI/180;
284
        if (IE)
285
          return function(angle)
286
        {
287
          this._angle = angle;
288
          this._container.style.rotation=(angle%360)+"deg";
289
          this._vimage.style.top = -(this._rotationCenterY - this._imgHeight/2) + "px";
290
          this._vimage.style.left = -(this._rotationCenterX - this._imgWidth/2) + "px";
291
          this._container.style.top = this._rotationCenterY - this._imgHeight/2 + "px";
292
          this._container.style.left = this._rotationCenterX - this._imgWidth/2 + "px";
293
294
        }
295
          else if (supportedCSS)
296
          return function(angle){
297
            this._angle = angle;
298
            this._img.style[supportedCSS]="rotate("+(angle%360)+"deg)";
299
            this._img.style[supportedCSSOrigin]=this._parameters.center.join(" ");
300
          }
301
          else
302
            return function(angle)
303
          {
304
            this._angle = angle;
305
            angle=(angle%360)* rad;
306
            // clear canvas
307
            this._canvas.width = this._width;//+this._widthAdd;
308
            this._canvas.height = this._height;//+this._heightAdd;
309
310
            // REMEMBER: all drawings are read from backwards.. so first function is translate, then rotate, then translate, translate..
311
            this._cnv.translate(this._imgWidth*this._aspectW,this._imgHeight*this._aspectH);	// at least center image on screen
312
            this._cnv.translate(this._rotationCenterX,this._rotationCenterY);			// we move image back to its orginal
313
            this._cnv.rotate(angle);										// rotate image
314
            this._cnv.translate(-this._rotationCenterX,-this._rotationCenterY);		// move image to its center, so we can rotate around its center
315
            this._cnv.scale(this._aspectW,this._aspectH); // SCALE - if needed ;)
316
            this._cnv.drawImage(this._img, 0, 0);							// First - we draw image
317
          }
318
319
      })()
320
      }
321
322
      if (IE)
323
      {
324
        Wilq32.PhotoEffect.prototype.createVMLNode=(function(){
0 ignored issues
show
Wilq32 does not seem to be defined.
Loading history...
There were too many errors found in this file; checking aborted after 95%.

If JSHint finds too many errors in a file, it aborts checking altogether because it suspects a configuration issue.

Further Reading:

Loading history...
325
          document.createStyleSheet().addRule(".rvml", "behavior:url(#default#VML)");
326
          try {
327
            !document.namespaces.rvml && document.namespaces.add("rvml", "urn:schemas-microsoft-com:vml");
328
            return function (tagName) {
329
              return document.createElement('<rvml:' + tagName + ' class="rvml">');
330
            };
331
          } catch (e) {
332
            return function (tagName) {
333
              return document.createElement('<' + tagName + ' xmlns="urn:schemas-microsoft.com:vml" class="rvml">');
334
            };
335
          }
336
        })();
337
      }
338
339
})(jQuery);